Сценарий - это расширение вашей переменной до значения, которое вы установили, т.е. /tmp/{dir1,dir2}/*.file
, верно?
И, как вы правильно обнаружили, вам нужно попросить оболочку «снова пройти через эту строку» и заново оценить все переменные, которые вы там найдете.
Таким образом, нет другого пути, кроме eval (хорошо, вы могли бы разболтать вещи и тратить много вычислительной мощности, и по существу переделать функцию eval с вашим собственным кодом.)
Единственное, что я могу порекомендовать, - это использовать функцию отладки оболочки set -vx
, чтобы лично убедиться, как она работает, т.е.
$set -vx
set -vx
>set -vx
$SINGLE_FILE=/tmp/blah.file
SINGLE_FILE=/tmp/blah.file
>SINGLE_FILE=/tmp/blah.file
$MULTIPLE_FILES=/tmp/{dir1,dir2}/*.file
MULTIPLE_FILES=/tmp/{dir1,dir2}/*.file
>MULTIPLE_FILES='/tmp/{dir1,dir2}/*.file'
$echo /tmp/blah.file '/tmp/{dir1,dir2}/*.file' /tmp/newDir
echo /tmp/blah.file '/tmp/{dir1,dir2}/*.file' /tmp/newDir
>echo /tmp/blah.file '/tmp/{dir1,dir2}/*.file' /tmp/newDir
/tmp/blah.file /tmp/{dir1,dir2}/*.file /tmp/newDir
$eval echo /tmp/blah.file '/tmp/{dir1,dir2}/*.file' /tmp/newDir
eval echo /tmp/blah.file '/tmp/{dir1,dir2}/*.file' /tmp/newDir
>eval echo /tmp/blah.file '/tmp/{dir1,dir2}/*.file' /tmp/newDir
echo /tmp/blah.file /tmp/{dir1,dir2}/*.file /tmp/newDir
>echo /tmp/blah.file '/tmp/dir1/*.file' '/tmp/dir2/*.file' /tmp/newDir
/tmp/blah.file /tmp/dir1/*.file /tmp/dir2/*.file /tmp/newDir