Jak umieścić komentarz liniowy dla polecenia wielowierszowego [duplikat]

To pytanie ma już odpowiedź tutaj:

Wiem, jak napisać polecenie Wielowierszowe w skrypcie Bash, ale jak Mogę dodać komentarz dla każdej linii w poleceniu wielowierszowym?

CommandName InputFiles      \ # This is the comment for the 1st line
            --option1 arg1  \ # This is the comment for the 2nd line
            --option2 arg2    # This is the comment for the 3nd line

Ale niestety komentarz po znaku \ złamie polecenie.

Author: dreftymac, 2012-03-01

4 answers

Obawiam się, że w ogóle nie możesz zrobić tego, o co prosisz. Najlepsze, co możesz zrobić, to komentarz w wierszach przed poleceniem, pojedynczy komentarz na końcu wiersza poleceń lub komentarz po poleceniu.

Nie można w ten sposób przeplatać komentarzy wewnątrz polecenia. \ s wyrażają intencję scalania linii, więc dla wszystkich intencji i celów próbujesz przeplatać komentarze w jednej linii, co i tak nie działa, ponieważ \ musi być w koniec linii, aby mieć taki efekt.

 44
Author: Perry,
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
2017-05-10 21:29:51

Tak to robię. Zasadniczo używając backtick Basha zastąpienie polecenia można umieścić te komentarze w dowolnym miejscu wzdłuż długiej linii poleceń, nawet jeśli są podzielone na linie. Umieściłem polecenie echo przed Twoim przykładem, abyś mógł wykonać przykład i zobaczyć, jak to działa:

echo CommandName InputFiles `#1st comment` \
             --option1 arg1 `#2nd comment` \
             --option2 arg2 `#3rd comment`

Kolejny przykład, w którym można umieścić wiele komentarzy w różnych punktach w jednej linii:

some_cmd --opt1 `#1st comment` --opt2 `#2nd comment` --opt3 `#3rd comment`
 438
Author: Marwan Alsabbagh,
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
2017-12-06 14:59:48

Można zapisać argumenty w tablicy:

args=(InputFiles      # This is the comment for the 1st line
      # You can have whole lines of comments in between, useful for:
      #--deprecated-option # This isn't use any more
      --option1 arg1  # This is the comment for the 2nd line

      # And even blank lines in between for readability
      --option2 arg2  # This is the comment for the 3nd line
     )
CommandName "${args[@]}"

Jednak wydaje mi się, że wygląda to nieco hakerski, jeśli jest to tylko w celu umożliwienia komentarzy dla każdego argumentu. Dlatego po prostu przepisałbym komentarz tak, aby odwoływał się do poszczególnych argumentów i umieszczał go ponad całym poleceniem.

 52
Author: Philipp,
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
2018-02-12 19:27:14

Na podstawie komentarza pjh do inna odpowiedź na to pytanie , zastępując IFS zmienną, o której wiadomo, że nie zawiera znaków innych niż białe znaki.

comment=
who ${comment# This is the command} \
    -u ${comment# This is the argument}
 14
Author: chepner,
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
2017-05-23 12:34:45