Bash "$@" не заменяет переменную

Если имена каталогов состоят из одного -на -строку, вы можете избежать проблем с каталогами, в именах которых есть пробелы, табуляции или подстановочные знаки, используяreadarray(bash v4+):

readarray -t dirs < subdirs2search.txt
find "${dirs[@]}"...

Это все равно не помогло бы, если имена некоторых каталогов начинаются с -, но с GNU findэто невозможно.

-1
17.10.2021, 09:08
1 ответ

Вам нужно экранировать сигил для $cпри вызове скрипта, а в скрипте eval "$@"получить второй раунд расширения переменных.

$ cat script.sh
#!/bin/bash

export c=23;

eval "$@"
$ (export a=231; export b=45; bash -x./script.sh echo "$a, $b, \$c")
+ export c=23
+ c=23
+ eval echo '231, 45, $c'
++ echo 231, 45, 23
231, 45, 23

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

$ (export a=231; export b=45; bash -x./script.sh 'echo "$a, $b, $c"')
+ export c=23
+ c=23
+ eval 'echo "$a, $b, $c"'
++ echo '231, 45, 23'
231, 45, 23
3
17.10.2021, 12:20

Теги

Похожие вопросы