Sizin kabuk tırnak yorumlayarak, hem edilir '
ve "
onlar bile ulaşmadan, echo
. Gereksiz bile olsa, sadece argümanımın yanına çift tırnak koyarım; Örneğin:
$ echo "Hello world"
Hello world
Bu yüzden, ilk örneğinizde, çıktınıza değişmez fiyat teklifi işaretlerini dahil etmek istiyorsanız, bunların kaçması gerekir:
$ echo \'Hello world\'
'Hello world'
Veya daha önce alıntı yapılan bir argüman içinde kullanılmaları gerekir (ancak aynı türden bir teklif olamaz veya yine de kaçmanız gerekir):
$ echo "'Hello world'"
'Hello world'
$ echo '"Hello world"'
"Hello world"
İkinci örneğinizde, dizginin ortasında bir komut ikamesi çalıştırıyorsunuz:
grep $ARG /var/tmp/setfile | awk {print $2}
Başlayanlar $
ayrıca kabuk tarafından özel olarak ele alınır - bunları değişken olarak görür ve yerine değerlerini koyar. Büyük olasılıkla bu değişkenlerin hiçbiri kabuğunuzda ayarlanmadığından, aslında sadece çalışır
grep /var/tmp/setfile | awk {print}
Yana grep
sadece bir argüman görür, o argümanı için konum arama deseni size, ve veri okumak gerekir yer stdin'nin olduğunu, bu bloklar girişi için bekleyen böylece varsayar. Bu yüzden ikinci komutunuz sadece takılıyor gibi görünüyor.
Argümanı tek tek alıntıladığınızda (ilk örneğinizin neredeyse işe yaramasının nedeni budur) bu olmaz, bu nedenle istediğiniz çıktıyı almanın bir yoludur:
echo \'' echo PARAM=` grep $ARG /var/tmp/setfile | awk '{print $2}' ` '\'
Ayrıca çift alıntı yapabilirsiniz, ancak $
s'den kaçmanız gerekir, böylece kabuk onları değişkenler olarak çözmez, böylece geri kalanlar da kabuk komut komutunu derhal çalıştırmaz:
echo "' echo PARAM=\` grep \$ARG /var/tmp/setfile | awk '{print \$2}' \` '"