CentOS7 및 RHEL7에서 발생할 수 있는 논리적 또는 의미적 오류

CentOS7 및 RHEL7에서 발생할 수 있는 논리적 또는 의미적 오류

몇 주 전에 이 문제가 발생했는데 시스템 문제인 줄 알았습니다. 그러나 몇 가지 조사를 한 후에 이것이 버그일 수 있다고 생각합니다. 아니면 내가 틀렸을 수도 있습니다. 예를 들어 CentOS7에서 여러 파일을 실행 echo하거나 조작하려고 하면 CentOS7에서 이것을 실행하면 반환되지만 RHEL7에서 동일한 명령을 실행하면 다음이 반환됩니다.touchecho file{a..c}.txtfile{a..c}.txtfilea.txt fileb.txt filec.txt

다른 사람도 같은 문제가 있습니까?

답변1

CentOS 시스템의 셸이 다음과 같이 중괄호 범위를 확장하지 않는 경우 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를 사용합니다. 쉘 옵션을 설정하여 동작을 재현할 수 있습니다 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

다양한 시스템에서 사용하는 셸에 따라 다릅니다.

중괄호 확장은 쉘에 대한 POSIX 표준 확장이지만 모든 쉘이 이를 구현하는 것은 아닙니다. 하시는 분들은 다르게 하셔도 됩니다.

쉘은 dash중괄호 확장을 구현하지 않습니다.

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

OpenBSD에 있는 쉘은 pdksh중괄호 확장을 구현하지만 범위에 대해서는 구현하지 않습니다.

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

bashzsh쉘 구현 범위 ksh93(숫자 및 문자)

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

관련 정보