(Tylko komentarz do „dlaczego?”; Podane odpowiedzi dotyczą „jak to naprawić”.) Podwójne cudzysłowy nie zagnieżdżają się. Nie #jest częścią argumentu -copcji; tylko "echo "jest. Po #prostu oznacza początek komentarza w wierszu.
chepner
To musi być w pliku!
Odpowiedzi:
5
Używaj „twardych” cudzysłowów dla podstępnych postaci:
Nie ma to nic wspólnego z podwójnymi cudzysłowami, jak w przypadku $postaci. sudo sh -c 'echo "#" > /file'też by działał. Po prostu oryginalny wiersz skryptu używa tych samych cytatów na obu poziomach bez ucieczki , w wyniku czego sudo sh -c "echo "reszta jest komentarzem (być może dzięki bashopcji interactive_comments)
Daniel Beck
0
Jeśli nie chcesz używać różnych cudzysłowów tylko dla jednej postaci, możesz także uniknąć znaku skrótu:
sudo sh -c "echo "\#" > /file"
Podobnie jak w wielu językach skryptowych, polecenia powłoki interpretują znak skrótu ( #) jako początek komentarza.
To nie działa, ponieważ wszystkie cytaty są usuwane przed przekazaniem ciągu sudo(i dalej do sh -c). Zasadniczo wykonuje polecenie echo # > /file, które jest równoważne z just echo.
#
jest częścią argumentu-c
opcji; tylko"echo "
jest. Po#
prostu oznacza początek komentarza w wierszu.Odpowiedzi:
Używaj „twardych” cudzysłowów dla podstępnych postaci:
źródło
$
postaci.sudo sh -c 'echo "#" > /file'
też by działał. Po prostu oryginalny wiersz skryptu używa tych samych cytatów na obu poziomach bez ucieczki , w wyniku czegosudo sh -c "echo "
reszta jest komentarzem (być może dziękibash
opcjiinteractive_comments
)Jeśli nie chcesz używać różnych cudzysłowów tylko dla jednej postaci, możesz także uniknąć znaku skrótu:
Podobnie jak w wielu językach skryptowych, polecenia powłoki interpretują znak skrótu (
#
) jako początek komentarza.źródło
sudo
(i dalej dosh -c
). Zasadniczo wykonuje polecenieecho # > /file
, które jest równoważne z justecho
.