it-swarm-eu.dev

Vyjádření řady řádků ve skriptu prostředí Shell

Zajímalo by mě, jestli existuje způsob, jak komentovat řadu řádků ve skriptu Shell. Jak bych to mohl udělat? Můžeme použít/* */v jiných programovacích jazycích. To je nejužitečnější, když konvertuji/používám/upravuji jiný skript A chci zachovat původní řádky místo mazání.

Najít a prefix # pro všechny řádky, které se nepoužívají, je těžkopádné.

Řekněme, že ve stopách je 100 řádků v následných řádcích, které se nepoužívají. Chci je všechny komentovat najednou. Je to možné?

49
Vijay
if false
then

...code...

fi

false vždy vrátí hodnotu false, takže kód bude vždy přeskočen.

46
Artelius

Nejuniverzálnější a nejbezpečnější metodou je uvedení komentáře do neplatné citace here-document, jako je tato:

<<"COMMENT"
    This long comment text includes ${parameter:=expansion}
    `command substitution` and $((arithmetic++ + --expansion)).
COMMENT

Výčet výše uvedeného oddělovače COMMENT je nutný k tomu, aby se zabránilo expanzi parametru , Substituci příkazů a aritmetické expanzi, ke které by došlo Jinak, protože manuál Bash stavy a standard POSIX Shell určuje .

Ve výše uvedeném případě by necitování COMMENT mělo za následek, že proměnná parameter Bude přiřazena text expansion, pokud by byla prázdná nebo unset, provedení příkazu command substitution, zvýšení proměnné arithmetic a dekrementace proměnné expansion.

Porovnání dalších řešení:

Použití if false; then comment text fi vyžaduje, aby text komentáře byl Syntakticky správný Bash kód, zatímco přirozené komentáře často nejsou, pokud Pouze pro možné nevyvážené apostrofy. Totéž platí pro konstrukci : || { comment text } .

Uvedení komentářů do argumentu jednorázového příkazu void, jako v :'comment text', má nevýhodu neschopnosti zahrnout apostrofy. Dvojité Argumenty, jako v :"comment text", stále podléhají expanzi parametrů, Substituci příkazu a aritmetické expanzi, stejně jako nekótované Zde-obsah dokumentu a mohou vést k vedlejší účinky popsané výše.

Použití skriptů a editorů pro automatické prefixy každého řádku v bloku S '#' má nějaké zásluhy, ale neodpovídá přesně na otázku.

44
spbnick

Můžete také napsat víceřádkové komentáře pomocí:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

Podle Bash Reference pro vestavěné Bourne Shell

: (dvojtečka)

: [argumenty]

Neudělejte nic víc než rozšiřování argumentů a provádění přesměrování. Stav návratu je nula.

Díky Ikramovi za to, že to ukázal v příspěvku Shell skriptu dal více řádkových komentářů

26
asev69

Můžete použít dokument 'here' bez příkazu k jeho odeslání.

#!/bin/bash
echo "Say Something"
<<COMMENT1
    your comment 1
    comment 2
    blah
COMMENT1
echo "Do something else"

Wikipedia Reference

20
Buggabill

Textové editory mají úžasnou funkci nazvanou vyhledávání a nahrazování. Neřeknete, jaký editor používáte, ale protože skripty Shell mají tendenci být * nix a používám VI, zde je příkaz komentovat řádky 20 až 50 nějakého skriptu Shell:

:20,50s/^/#/
9
kdgregory
: || {
your code here
your code here
your code here
your code here
}
4
jj_5698

Podle tohoto webu :

#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU 
'

echo "Init..."
# rest of script
1
user2763554

Co když si prostě zabalíte svůj kód do funkce?

Takže tohle:

cd ~/documents
mkdir test
echo "useless script" > about.txt

Stává se tímto:

CommentedOutBlock() {
  cd ~/documents
  mkdir test
  echo "useless script" > about.txt
}
1
Buksy

V závislosti na editoru, který používáte, existují některé zkratky pro komentář bloku řádků.

Dalším řešením by bylo dát kód do podmíněného bloku "if (0)";)

0
Carlos Tasada