Я пытаюсь получить цитируемые параметры сценария bash для безопасного получения вложенным сценарием. Любые идеи?
test.sh
#!/bin/bash
echo $*
bash myecho.sh $*
myecho.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
Образец:
bash test.sh aaa bbb '"ccc ddd"'
Результат:
aaa bbb "ccc ddd"
aaa
bbb
"ccc
ddd"
Желаемый результат
aaa bbb "ccc ddd"
aaa
bbb
ccc ddd
Ответы:
Обратите внимание, что конструкция «$ @» не является специфичной для bash и должна работать с любой оболочкой POSIX (по крайней мере, с тире). Также обратите внимание, что с учетом желаемого результата вам вообще не нужен дополнительный уровень цитирования. IE просто вызовите приведенный выше сценарий, например:
источник
$@
недоступен внутри функции (потому что он перезаписывается аргументами функции). Я пробовалfoovar="$@"
иfoovar=$@
+"$foovar"
в функции, но ничего неВы хотите использовать «$ @» (доллар в кавычках) для передачи параметров в нижний индекс. Вот так ....
ls-color.sh:
А почему .....
На странице руководства Bash :
Настройка демонстрационных скриптов ...
"$@"
- quoted-dollar-at - это преобразование идентичности для повторной передачи аргументов подоболочке (~ 99% случаев, это то, что вы хотели сделать):"$*"
- quoted-dollar-star разбивает аргументы в одну строку (~ 1% случаев, когда вам действительно нужно такое поведение, например, в условном выражении :)if [[ -z "$*" ]]; then ...
:$*
/$@
- без кавычек обе формы удаляют один уровень цитаты и интерпретируют пробелы в базовых строках, но игнорируют символы кавычек (почти всегда, это ошибка):Если вы хотите немного повеселиться, вы можете использовать «$ @», чтобы вложить элементы настолько глубоко, насколько захотите, выталкивая и выталкивая элементы из стека аргументов, если хотите.
источник