Встроенные комментарии для Bash?

Я хотел бы иметь возможность комментировать один флаг в однострочной команде. Bash только кажется, есть from # till end-of-line комментарии. Я смотрю на трюки вроде:

ls -l $([ ] && -F is turned off) -a /etc

Это уродливо, но лучше, чем ничего. Есть ли лучший способ?

Кажется, что работает следующее, но я не уверен, что он переносимый:

ls -l `# -F is turned off` -a /etc

Ответ 1

Я предпочитаю:

Комментирование в BASH script

У этого будут некоторые накладные расходы, но технически он отвечает на ваш вопрос

echo abc `#put your comment here` \
     def `#another chance for a comment` \
     xyz etc

И для конкретных трубопроводов есть чистое решение без накладных расходов

echo abc |        # normal comment OK here
     tr a-z A-Z | # another normal comment OK here
     sort |       # the pipelines are automatically continued
     uniq         # final comment

Как добавить комментарий к строке для многострочной команды

Ответ 2

Я считаю, что проще всего (и наиболее читаемым) просто скопировать строку и прокомментировать исходную версию:

#Old version of ls:
#ls -l $([ ] && -F is turned off) -a /etc
ls -l -a /etc

Ответ 3

$(: ...) немного менее уродливый, но все же не очень хороший.

Ответ 4

Как сохранить его в переменной?

#extraargs=-F
ls -l $extraargs -a /etc

Ответ 5

Большинство команд позволяют args поступать в любом порядке. Просто переместите прокомментированные флаги в конец строки:

ls -l -a /etc # -F is turned off

Затем, чтобы снова включить его, просто раскомментируйте и удалите текст:

ls -l -a /etc -F

Ответ 6

Здесь мое решение для встроенных комментариев между несколькими запрограммированными командами.

Пример без комментирования:

    #!/bin/sh
    çat input.txt \
    | grep something \
    | sort -r

Решение для комментария канала (с помощью вспомогательной функции):

    #!/bin/sh
    pipe_comment() {
        cat - 
    }
    cat input.txt \
    | pipe_comment "filter down to lines that contain the word: something" \
    | grep something \
    | pipe_comment "reverse sort what is left" \
    | sort -r

Или, если вы предпочитаете, здесь одно и то же решение без вспомогательной функции, но это немного грязнее:

    #!/bin/sh
    cat input.txt \
    | cat - `: filter down to lines that contain the word: something` \
    | grep something \
    | cat - `: reverse sort what is left` \
    | sort -r

Ответ 7

Если вы знаете, что переменная пуста, вы можете использовать ее в качестве комментария. Конечно, если он не пуст, это испортит вашу команду.

ls -l ${1# -F is turned off} -a /etc

& sect; 10,2. Замена параметров

Ответ 8

Если комментарий стоит сделать, он, вероятно, может идти в конце строки или в отдельной строке. Я редко нахожу потребность в комментариях внутри строки с кодом до и после комментария на любом языке.

О, есть одно исключение, которое является диалектом SQL, который я обычно использую, который использует "{comments}". Иногда я напишу:

CREATE UNIQUE INDEX u1_table ON Table(...);
CREATE {DUPS} INDEX d1_table ON Table(...);

Но даже это растяжение.

Ответ 9

Чтобы отключить часть команды типа a && b, я просто создал пустой script x, который находится на пути, поэтому я могу делать такие вещи, как:

mvn install && runProject

когда мне нужно построить, и

x mvn install && runProject

когда нет (используя Ctrl + A и Ctrl + E, чтобы перейти к началу и концу).