:
/usr/bin/bash -c sub=1; echo $sub
size değer taşınması için bir kabuktaki bir değişken, kullanım stdout'u ayarlamak ister misiniz altkabuk kökenli önceki son yankı komutu veya değişken $HOST_IPS
yılında $
işareti kaçmak için komut dizesine ikame edilecektir:
/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"
Daha acil görünürlüğü için
: @ gniourf_gniourf yorumuna
# v-- insert backslash here
/usr/bin/bash -c "HOST_IPS=$(same as before); echo \$HOST_IPS"
aksine, diğer dolar işaretleri kaçmak için aslında gerekli değildir. Ancak, yazılı olarak, komut ikamesi alt kabuk (!) Tarafından gerçekleştirilmez; sonucu, alt kabuğa geçirilen komut dizesiyle değiştirilir. çağrılar
mypid() { echo $$; }
bash -c "pid=$(mypid); echo \$pid; mypid"
çalışma şeklini göstermektedir: bir zamanlar üst kabuğun PID yazdırmak ve bir kez altkabuk işlevini bilmediği için
mypid
bilinen bir komut olmadığını şikayet edecektir.
Ana kabukta ifconfig | awk
komutunu çalıştırmanın bir sorun olması beklenmediğinden, muhtemelen komut değiştirme bölümünü değiştirmeden bırakabilirsiniz. Komutun subshell tarafından çalıştırılması önemliyse, oradaki her şeyden de kaçmak zorunda kalacaksınız.
1./bin/echo'yu nerede görüyorsunuz? 2. Dış tırnaklarınız çift tırnak olduğundan, _all_ '$' içindeki işaretlerden kaçmanız gerekir. –