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
я думаю, что обратные слеши, вероятно, должны быть удалены.