Hai per evitare il segno $
nel comando echo finale, o la variabile $HOST_IPS
verrà sostituita nella stringa di comando prima che venga generata la subshell:
/usr/bin/bash -c "HOST_IPS=$(/usr/bin/ifconfig | /usr/bin/awk 'BEGIN {cnt=0} {if($0 ~ /inet/&& cnt==1) {print $2} cnt++}'); echo \$HOST_IPS"
Per una visibilità più immediata:
# v-- insert backslash here
/usr/bin/bash -c "HOST_IPS=$(same as before); echo \$HOST_IPS"
Contrariamente a @ di gniourf_gniourf commento, non è effettivamente necessario per sfuggire gli altri segni del dollaro. Tuttavia, come scritto, la sostituzione di comando non viene eseguita dalla subshell (!); il suo risultato è sostituito nella stringa di comando che viene passata alla subshell. Le chiamate
mypid() { echo $$; }
bash -c "pid=$(mypid); echo \$pid; mypid"
dimostrano il modo in cui funziona: sarà una volta stampare il PID della shell genitore e una volta che si lamentano che mypid
non è un comando noto perché la subshell non conosce la funzione.
Poiché è improbabile che il comando ifconfig | awk
nella shell parent sia un problema, è possibile lasciare invariata la parte di sostituzione del comando. Se è importante che il comando venga eseguito dalla subshell, dovrai anche scappare da tutte le cose.
1. Dove vedi '/ bin/echo'? 2. Poiché le tue virgolette esterne sono doppie virgolette, devi sfuggire _all_ i simboli '$' all'interno. –