В bash, если вы это сделаете:
mkdir /tmp/empty
array=(/tmp/empty/*)
вы обнаружите, что array
теперь имеет один элемент, "/tmp/empty/*"
, а не нуль, как вам хотелось бы. К счастью, этого можно избежать, включив опцию оболочки nullglob, используя shopt -s nullglob
Но значение nullglob является глобальным, а при редактировании существующей оболочки script может быть нарушено (например, кто-то проверял код выхода ls foo*
, чтобы проверить, есть ли файлы, начинающиеся с "foo"?). Поэтому, в идеале, я хотел бы включить его только для небольшого объема - в идеале - расширения одного файла. Вы можете отключить его снова, используя shopt -u nullglob
Но, конечно, только если он был отключен раньше:
old_nullglob=$(shopt -p | grep 'nullglob$')
shopt -s nullglob
array=(/tmp/empty/*)
eval "$old_nullglob"
unset -v old_nullglob
заставляет меня думать, что должен быть лучший способ. Очевидное "положить его в подоболочку" не работает, так как, конечно, назначение переменной умирает с подоболочкой. За исключением ожидания группы Austin для импорта синтаксиса ksh93, есть?