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ć.


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"

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.