2012-04-01 22 views
8

Co prawda jestem neofitą basha. Zawsze chcę sięgać po Python w celu tworzenia skryptów powłoki. Jednak staram się naciskać, aby nauczyć się trochę basha. Jestem ciekawy, dlaczego poniższy kod nie działa.Inline zmienne skryptu bash

sh -c "F=\"123\"; echo $F" 

Odpowiedz

13

To nie działa, ponieważ zmienna ekspansja w ciągu podwójnie cytowany dzieje przed komenda jest tzw. Oznacza to, że jeśli typ:

echo "$HOME" 

Powłoka ta przekształca się:

echo "/home/lars" 

Przed faktycznie wywołanie polecenia echo. Podobnie, jeśli wpiszesz:

sh -c "F=\"123\"; echo $F" 

ten zostanie przekształcony:

sh -c "F=\"123\"; echo" 

Przed wywołaniem komendy sh. Można używać apostrofów aby hamować ekspansję zmienny, na przykład:

sh -c 'F="123"; echo $F' 

Można też uciec z $ z odwrotnym ukośnikiem:

sh -c "F=\"123\"; echo \$F" 
+0

Ponadto, jeśli starasz się dowiedzieć 'bash', wydać trochę czasu w jakości ze stroną man 'bash', a także [#bash faq] (http://mywiki.wooledge.org/BashFAQ). – larsks

+0

Należy również zauważyć, że w cytowanym pojedynczo żądaniu nie trzeba było używać ukośnika odwrotnego: "F =" 123 "" zamiast "F = \" 123 \ "". – larsks

+0

Dzięki! Ma pełny sens. To małe szczegóły, które robią wielką różnicę. :-) – Daniel