Bash 5文件名扩展和nullglob

阿克塞尔K

3.5.8节中bash-5.0手册指出以下内容。

拆分单词后,除非已设置-f选项(请参阅内置内置集),否则Bash会在每个单词中扫描字符'*','?'和'['。如果出现这些字符之一,则将该单词视为一个模式,并替换为与该模式匹配的文件名按字母顺序排序的列表(请参见模式匹配)。如果找不到匹配的文件名,并且禁用了shell选项nullglob,则该词保持不变。如果设置了nullglob选项,但未找到匹配项,则会删除该单词。

但是,在我的shell中,激活nullglob似乎在以下情况下也会启动文件名扩展。

$ echo ${BASH_VERSION}
5.0.0(1)-release
$ shopt -s nullglob
$ FOO="/home/smith"
$ echo ${FOO//\//\\\/}

$ echo "${FOO//\//\\\/}"
\/home\/smith

有趣的是,使用我可以使用的较旧的bash版本,会发生不同的行为。

$ echo ${BASH_VERSION}
4.3.30(1)-release
$ shopt -s nullglob
$ FOO="/home/smith"
$ echo ${FOO//\//\\\/}
\/home\/smith
$ echo "${FOO//\//\\\/}"
\/home\/smith

问题

我本来希望不会扩展文件名。您能解释一下为什么echo ${FOO//\//\\\/}不使用bash 5.0打印任何内容吗?

阿克塞尔K

确实,经过更多研究后,事实证明此后在中进行了还原v5.1-alpha

$ echo ${BASH_VERSION}
5.1.0(1)-alpha
$ shopt -s nullglob
$ FOO="/home/smith"
$ echo ${FOO//\//\\\/}
\/home\/smith
$ echo "${FOO//\//\\\/}"
\/home\/smith

这是我个人所期望的。

这似乎也可以解决不同的情况(感谢Stéphane指出):

$ echo ${BASH_VERSION}
5.1.0(1)-alpha
$ a='/\x' bash -O nullglob -c 'echo $a'
/\x

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扩展文件属性和bash

来自分类Dev

Bash替换文件名的右侧

来自分类Dev

如何在bash终端中从%f获取不带扩展名的文件名?

来自分类Dev

bash:使用列表更改文件名

来自分类Dev

Bash oneliner重命名文件名

来自分类Dev

bash,列出文件名,数组

来自分类Dev

文件名参数扩展bash

来自分类Dev

在Bash中搜索包含特定字符串的特定扩展名文件名

来自分类Dev

如何在bash中引用glob扩展文件名?

来自分类Dev

如何从bash的文件名扩展机制中排除某些文件?

来自分类Dev

Bash遍历目录和文件名

来自分类Dev

在Bash中选择Unicode文件名

来自分类Dev

如何在bash中检索文件名或扩展名

来自分类Dev

比较变量与文件名bash

来自分类Dev

使用Bash修剪Tarball的文件名

来自分类Dev

通过Bash重命名和转换文件名

来自分类Dev

如何在bash终端中从%f获取不带扩展名的文件名?

来自分类Dev

从bash中的管道迭代文件名

来自分类Dev

bash源命令和脚本文件名

来自分类Dev

尝试更改bash中的文件名

来自分类Dev

bash中的Expect脚本的文件名扩展

来自分类Dev

Bash中的“文件名扩展”和“路径名扩展”是否相同?

来自分类Dev

bash函数:分割文件的名称和扩展名

来自分类Dev

Bash大括号扩展以删除部分文件名

来自分类Dev

Bash如何知道何时进行文件名扩展?

来自分类Dev

限制Bash文件名扩展

来自分类Dev

在bash shell脚本中,如何重命名多个文件,仅保留数字和原始文件名的扩展名?

来自分类Dev

Bash Shell抱怨我没有使用过无效的选项...仅在* .mp4文件扩展名上

来自分类Dev

Bash 文件扩展名