몇 주 전에 이 문제가 발생했는데 시스템 문제인 줄 알았습니다. 그러나 몇 가지 조사를 한 후에 이것이 버그일 수 있다고 생각합니다. 아니면 내가 틀렸을 수도 있습니다. 예를 들어 CentOS7에서 여러 파일을 실행 echo
하거나 조작하려고 하면 CentOS7에서 이것을 실행하면 반환되지만 RHEL7에서 동일한 명령을 실행하면 다음이 반환됩니다.touch
echo file{a..c}.txt
file{a..c}.txt
filea.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
bash
및 zsh
쉘 구현 범위 ksh93
(숫자 및 문자)
$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
$ echo {1,2,3}
1 2 3