
数週間前にこの問題が発生しましたが、システムの問題であると思いました。しかし、いくつかの調査を行った後、これはバグかもしれないと思います。それとも私が間違っている可能性があります。たとえば、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