CentOS7 与 RHEL7 中可能出现的逻辑或语义错误

CentOS7 与 RHEL7 中可能出现的逻辑或语义错误

几周前我遇到了这个问题,但我认为这是我的系统出现问题。但经过几次调查后,我相信这可能是一个错误。或者也许我错了。当尝试在 CentOS7 上执行echotouch操作多个文件时,例如:echo file{a..c}.txt在 CentOS7 上执行此操作会返回,file{a..c}.txt 但在 RHEL7 上执行相同的命令会返回:filea.txt fileb.txt filec.txt

还有其他人有同样的问题吗?

答案1

如果 CentOS 系统上的 shell 是dash,您会看到此行为,它不会像这样扩展大括号范围:

$ for shell in bash dash ksh
> do
> echo in $shell:
> $shell -c 'echo file{a..c}.txt'
> done
in bash:
filea.txt fileb.txt filec.txt
in dash:
file{a..c}.txt
in ksh:
filea.txt fileb.txt filec.txt

来自评论您在 CentOS 系统上使用 zsh。我可以通过设置 shell 选项来重现该行为ignorebraces

$ set -o|grep ignorebraces
ignorebraces          off
$ echo {1..3}
1 2 3
$ set -o ignorebraces
$ echo {1..3}
{1..3}
$ set +o ignorebraces
$ echo {1..3}
1 2 3

答案2

这取决于您在各种系统上使用的 shell。

大括号扩展是 shell 的 POSIX 标准的扩展,但并非每个 shell 都实现它。那些这样做的人可能会以不同的方式来做。

shelldash不实现大括号扩展:

$ echo {0..9}
{0..9}
$ echo {1,2,3}
{1,2,3}

shell pdksh(在 OpenBSD 上找到)实现了大括号扩展,但不适用于范围:

$ echo {0..9}
{0..9}
$ echo {1,2,3}
1 2 3

bashzsh和shell 实现范围ksh93(数字和字母)

$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
$ echo {1,2,3}
1 2 3

相关内容