Komentowanie zbioru wierszy w skrypcie powłoki

Zastanawiałem się, czy jest sposób na skomentowanie zestawu linii w skrypcie powłoki. Jak mogłem to zrobić? Możemy używać / * * / w innych językach programowania. Jest to najbardziej przydatne, gdy konwertuję/używam / modyfikuję inny skrypt i chcę zachować oryginalne linie zamiast usuwać.

Wydaje się kłopotliwe znalezienie i prefiks # dla wszystkich linii, które nie są używane.

Powiedzmy, że w skrypcie jest 100 linii, które nie są używane. Chcę skomentuj je wszystkie za jednym razem. Czy to możliwe?

Author: Vijay, 2009-09-18

10 answers

if false
then

...code...

fi

false zawsze zwraca false, więc będzie to zawsze pomijać kod.

 45
Author: Artelius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:55:46

Najbardziej wszechstronną i bezpieczną metodą jest umieszczenie komentarza w pustce cytowanej here-document, tak:

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

Przytaczając powyższy ogranicznik COMMENT jest konieczne, aby zapobiec parametrowi Rozszerzanie, zastępowanie poleceń i rozszerzanie arytmetyczne, które następowałoby w przeciwnym razie, jak podaje Instrukcja Bash , a standard powłoki POSIX określa .

W powyższym przypadku brak cytowania COMMENT spowodowałby powstanie zmiennej parameter przypisany tekst expansion, jeśli był pusty lub wyłączony, wykonanie polecenia command substitution, zmienna zwiększająca arithmetic i zmniejszająca zmienna expansion.

Porównując inne rozwiązania do tego:

Użycie if false; then comment text fi wymaga, aby tekst komentarza był poprawny składniowo Kod Bash, podczas gdy komentarze naturalne często nie są, jeśli tylko dla możliwych niezrównoważonych apostrofów. To samo dotyczy : || { comment text } konstruuj.

Umieszczanie komentarzy w pojedynczo cytowanym argumencie polecenia void, jak w :'comment text', ma wadę niemożności dołączania apostrofów. Double-quoted argumenty, jak w :"comment text", nadal podlegają rozszerzaniu parametrów, zastępowanie poleceń i rozszerzanie arytmetyczne, takie samo jak nie cytowane tutaj-treść dokumentu i może prowadzić do skutków ubocznych opisanych powyżej.

Używanie skryptów i narzędzi edytora do automatycznego prefiksu każdej linii w blok z ' # ' ma pewne zalety, ale nie odpowiada dokładnie na pytanie.

 44
Author: spbnick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-04 13:23:39

Możesz także dodawać komentarze Wielowierszowe używając:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

Zgodnie z referencją Bash dla Bourne Shell builtins

: (dwukropek)

: [argumenty]

Nie rób nic poza rozwijaniem argumentów i wykonywaniem przekierowań. Status powrotu wynosi zero.

Podziękowania dla Ikram za zwrócenie na to uwagi w poście skrypt powłoki umieścić komentarz wielu linii

 25
Author: asev69,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 07:18:40

Możesz użyć dokumentu "tutaj" bez polecenia, aby go wysłać.

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

Odnośnik Do Wikipedii

 20
Author: Buggabill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:56:11

Edytory tekstu mają niesamowitą funkcję o nazwie Szukaj i zastępuj. Nie mówisz jakiego edytora używasz, ale ponieważ skrypty powłoki są zazwyczaj *nix, a ja używam VI, oto polecenie komentowania linii 20 do 50 jakiegoś skryptu powłoki:

:20,50s/^/#/
 9
Author: kdgregory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:55:37
: || {
your code here
your code here
your code here
your code here
}
 4
Author: jj_5698,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-18 11:08:45

Co jeśli po prostu zawiń swój kod w funkcję?

Więc to:

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

Staje się to:

CommentedOutBlock() {
  cd ~/documents
  mkdir test
  echo "useless script" > about.txt
}
 1
Author: Buksy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 12:50:26

W zależności od używanego edytora istnieje kilka skrótów do komentowania bloku wierszy.

Innym obejściem byłoby umieszczenie kodu w bloku warunkowym "if (0)";)

 0
Author: Carlos Tasada,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 12:55:06

Zgodnie z tą stroną :

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

echo "Init..."
# rest of script
 0
Author: user2763554,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-26 04:02:08

Ten jednowierszowy Perl komentuje linie od 1 do 3 pliku orig.sh inclusive (gdzie pierwsza linia ma numer 0) i zapisuje skomentowaną wersję do cmt.sh.

perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh

Oczywiście możesz zmienić liczby graniczne zgodnie z wymaganiami.

Jeśli chcesz edytować plik w miejscu, jest jeszcze krótszy:

perl -in -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh

Demo

$ cat orig.sh 
a
b
c
d
e
f

$ perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh

$ cat cmt.sh 
a
#b
#c
#d
e
f
 -1
Author: ire_and_curses,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-18 13:56:37