小编hep*_*t72的帖子

是否有类似 tcsh 的 shopt glob 设置或设置组合?

我正在从一个长期的 tcsh 用户过渡到一个新的 bash 用户(它已经过期了)。我定期在 tcsh 中动态地编写了很多 foreach 循环,所以我学习了 bash 的 for 循环的语法作为替代,但是当不匹配的 glob 模式作为文字字符串通过循环时感到惊讶。我寻找一种方法来改变这种行为,这样文字字符串就会被跳过并找到shopt -s nullglob。我的理解是,这在理论上应该等同于 tcsh 的行为方式,但今天我发现了一个不同之处。当我这样做时ls ../*.doesnotmatch,结果是当前目录内容的列表。具体来说,我是这样做的:

重击:

$ shopt -s nullglob
$ ls ../*.sam
extractSplitReads_BwaMem    extractSplitReads_BwaMem.xml
$ shopt -u nullglob
$ ls ../*.sam
ls: ../*.sam: No such file or directory
Run Code Online (Sandbox Code Playgroud)

父目录中没有匹配的内容*.sam,尤其是当前目录。一开始我真的很困惑,但后来我意识到 glob 模式正在消失并且命令正在执行,就好像我没有提供任何参数一样,例如:

$ ls
Run Code Online (Sandbox Code Playgroud)

所以我尝试单独设置failglob和使用nullglob,但是只要设置了failglob,任何不匹配的glob模式都会终止命令,无论是否存在匹配的模式:

重击:

$ shopt -s failglob
$ shopt -s nullglob
$ ls ../vis*/*.xml
../visualization/LAJ.xml
$ ls ../vis*/*.xml ../*.sam
bash: no match: ../*.sam
$ ls ../{vis*/*.xml,*.sam} …
Run Code Online (Sandbox Code Playgroud)

bash tcsh wildcards shopt

7
推荐指数
1
解决办法
525
查看次数

标签 统计

bash ×1

shopt ×1

tcsh ×1

wildcards ×1