在bash中,如果您这样做:
mkdir /tmp/empty
array=(/tmp/empty/*)
您会发现array
现在只有一个元素"/tmp/empty/*"
,而不是您想要的零。值得庆幸的是,这可以通过使用shopt -s nullglob
打开nullglob shell选项来避免
但ls foo*
是全局的,在编辑现有的shell脚本时,可能会破坏某些内容(例如,是否有人检查了nullglob的退出代码,以检查是否存在以“foo”开头的文件?)。所以,理想情况下,我只想在很小的范围内启用它-理想情况下,一个文件名扩展。您可以使用shopt -u nullglob
再次关闭它,但当然只有在之前禁用它的情况下:
old_nullglob=$(shopt -p | grep 'nullglob$')
shopt -s nullglob
array=(/tmp/empty/*)
eval "$old_nullglob"
unset -v old_nullglob
这让我觉得一定有更好的办法。显而易见的“放在subshell中”是行不通的,因为变量赋值与subshell一起消失了。除了waiting for the Austin group还可以导入ksh93语法吗?
https://stackoverflow.com/questions/9126060
复制相似问题