Bash: разделите длинный строковый аргумент на несколько строк?

Учитывая команду, которая принимает один длинный строковый аргумент, такой как:

mycommand -arg1 "very long string which does not fit on the screen"

возможно ли каким-то образом разбить его так же, как отдельные аргументы можно разделить на \.

Я старался:

mycommand -arg1 "very \
    long \
    string \
    which ..."

но это не сработает.

mycommand - внешняя команда, поэтому ее нельзя изменить, чтобы принимать одиночные аргументы.

Ответы

Ответ 1

Вы можете присвоить свою строку переменной:

long_arg="my very long string\
 which does not fit\
 on the screen"

Затем просто используйте переменную:

mycommand "$long_arg"

В двойных кавычках удаляется символ новой строки, которому предшествует обратная косая черта. Обратите внимание, что все остальные пробелы в строке значительны, то есть будут присутствовать в переменной.

Ответ 2

Вы пробовали без кавычек?

$ foo() { echo -e "1-$1\n2-$2\n3-$3"; }

$ foo "1 \
2 \
3"

1-1 2 3
2-
3-

$ foo 1 \
2 \ 
3

1-1
2-2
3-3

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

Ответ 3

я думаю, что обратные слеши, вероятно, должны быть удалены.