Polecenie powłoki nie działa z # #

0

To jest moje polecenie powłoki:

sudo sh -c "echo "#" > /file"

Ale to nie działa, ale działa:

sudo sh -c "echo "hi" > /file"

Jak mogę to naprawić, ponieważ # musi w nim być.


źródło
3
(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:

sudo sh -c "echo '#' > /file"
Paul R.
źródło
3
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.

nocny basen
źródło
Nie działa dla mnie!
2
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.
Gordon Davisson