gpt4 book ai didi

bash - 有没有一种简单的方法可以为一个 glob 设置 nullglob

转载 作者:行者123 更新时间:2023-11-29 08:44:40 29 4
gpt4 key购买 nike

在 bash 中,如果你这样做:

mkdir /tmp/empty
array=(/tmp/empty/*)

你发现 array 现在有一个元素,"/tmp/empty/*",而不是你想要的零。值得庆幸的是,这可以通过使用 shopt -s nullglob

打开 nullglob shell 选项来避免

但 nullglob 是全局的,在编辑现有的 shell 脚本时,可能会破坏某些东西(例如,是否有人检查了 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

让我觉得一定有更好的方法。显而易见的“将其放入子外壳中”不起作用,因为变量赋值当然会随着子外壳而消失。除了 waiting for the Austin group导入ksh93语法,有吗?

最佳答案

完成后取消设置:

shopt -u nullglob

并且正确地(即存储之前的状态):

shopt -u | grep -q nullglob && changed=true && shopt -s nullglob
... do whatever you want ...
[ $changed ] && shopt -u nullglob; unset changed

关于bash - 有没有一种简单的方法可以为一个 glob 设置 nullglob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9126060/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com