Jak mogę skomentować każdy wiersz z poniższych wierszy skryptu?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Jeśli spróbuję dodać komentarz typu:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Dostaję:
#: not found
Czy można tu komentować?
Odpowiedzi:
Będzie to wiązało się z pewnym narzutem, ale technicznie odpowiada na twoje pytanie:
W szczególności w przypadku rurociągów istnieje czyste rozwiązanie bez kosztów ogólnych:
Zobacz pytanie dotyczące przepełnienia stosu Jak umieścić komentarz wierszowy dla polecenia wielowierszowego .
źródło
Końcowy ukośnik odwrotny musi być ostatnim znakiem w wierszu, aby został zinterpretowany jako polecenie kontynuacji. Po nim nie są dozwolone żadne komentarze ani nawet spacje.
Pomiędzy poleceniami powinno być możliwe umieszczenie wierszy komentarza
źródło
|
. Jeśli spróbujeszcat file1\<newline>#comment<newline>file2
, zobaczysz, że nie dostanieszcat file1 file2
, ale raczejcat file1; file2
.cat file1 | # comment<newline>sort
działa dobrze. Tak teżcat file1 && # comment<newline>echo foo
. Zatem komentarze mogą być dołączane po|
lub&&
lub||
, ale nie po `\` lub w środku polecenia.Jak zauważył DigitalRoss, końcowy ukośnik odwrotny nie jest konieczny, gdy wiersz kończy się
|
. Możesz umieścić komentarze w wierszu następującym po|
:źródło
Odwrotny ukośnik ucieka z #, interpretując go jako znak dosłowny zamiast znaku komentarza.
źródło
$IFS
komentarze hackiWykorzystuje Hack ekspansja parametr na
$IFS
, który jest używany do oddzielania słów poleceń:Podobnie:
Używając tego, możesz umieścić komentarz w wierszu poleceń z kontynuacją:
ale komentarz będzie musiał być przed
\
kontynuacją.Zwróć uwagę, że interpretacja parametrów jest wykonywana wewnątrz komentarza:
Rzadki wyjątek
Jedynym rzadkim przypadkiem niepowodzenia jest sytuacja, w której
$IFS
poprzednio rozpoczęto od dokładnego tekstu, który jest usuwany przez rozszerzenie (tj. Po#
znaku):Zwróć uwagę, że na finale
foobar
nie ma miejsca, co ilustruje problem.Ponieważ
$IFS
domyślnie zawiera tylko białe znaki, jest bardzo mało prawdopodobne, że napotkasz ten problem.Kredyt do komentarza @ PJH za który wywołał tę odpowiedź.
źródło
Oprócz przykładów opracowanych przez DigitalRoss, oto inny formularz, którego możesz użyć, jeśli wolisz
$()
zamiast grawisów`
Oczywiście możesz również użyć składni dwukropka z odwrotnymi apostrofami:
Dodatkowe uwagi
Przyczyna
$(#comment)
nie działa, ponieważ gdy widzi#
, traktuje resztę linii jako komentarze, w tym nawiasy zamykające:comment)
. Dlatego nawiasy nigdy nie są zamknięte.Backticks analizuje inaczej i wykryje zamykający backtick nawet po pliku
#
.źródło
Oto skrypt bash, który łączy idee i idiomy kilku poprzednich komentarzy, aby dostarczyć, wraz z przykładami, komentarze w wierszu o ogólnej formie
${__+ <comment text>}
.W szczególności
<comment text>
może być wieloliniowy<comment text>
nie jest rozszerzany parametramiJest jeden na ograniczenie
<comment text>
, a mianowicie, niesymetryczne szelki'}'
i nawiasy')'
muszą być chronione (tzn'\}'
i'\)'
).Jest jeden wymóg dotyczący lokalnego środowiska bash:
__
musi być cofniętaKażda inna poprawna składniowo nazwa parametru bash będzie służyć zamiast
__
, pod warunkiem, że nazwa nie ma ustawionej wartości.Oto przykładowy skrypt
źródło