Код, как предполагалось, с результатом глобуса, назначенного переменной, будет выглядеть следующим образом:
$ mkdir ryan
$ mkdir ryan/smells-bad
$ FOO=(ryan/smells-*)
$ echo "${FOO[@]}"
ryan/smells-bad
$ echo "$FOO"
ryan/smells-bad
$ touch "$FOO/rotten_eggs"
$ ls -l "$FOO"
total 0
-rw-r--r-- 1 ryan ryan 0 Mar 1 11:17 rotten_eggs
$FOO
на самом деле является массивом здесь, но $ FOO также работает, чтобы получить первый элементмассива.
но посмотрите, как глобус может соответствовать более чем одному файлу (следовательно, массив является хорошей идеей)
$ mkdir ryan/clean
$ FOO=(ryan/*)
$ echo "$FOO"
ryan/clean
$ echo "${FOO[@]}"
ryan/clean ryan/smells-bad
В этих случаях присваиваются результаты глоба.к переменной по желанию, а не к переменной, раскрываемой как глобус в точке использования.
Конечно, это означает, что переменная действительно должна всегда использоваться в двойных кавычках "..."
в противном случае, если само имя файла(расширение glob) также содержит *
, оно будет снова glob.
например
$ touch ryan/'*ea*'
$ FOO=(ryan/*ea*)
$ echo "${FOO[@]}"
ryan/clean ryan/*ea*
$ echo ${FOO[@]}
ryan/clean ryan/clean ryan/*ea*