エコー "aaa" >abc.1.txt エコー "bbb" >abc.2.txt cp abc*
Linuxにエラーはありません
バグ 同じコマンド [cp abc.1.txt abc.2.txt]
cp abc.* = cp abc.1.txt abc.2.txt
なぜ?
答え1
これはバグではありませんが、シェル変数式の期待される動作です。
ulrich-schwarzが正しく指摘したように、コマンドがcp
実行される前に変数拡張が発生します。式の基準を満たす 2 つのファイルがあるため、abc*
フルネームに展開されます。
実際に3番目のファイルを生成すると、これら3つのabc.3.txt
ファイルをcp
。
コマンドを実行する前にデバッグ()モードを設定すると、これらすべてを確認できますset -x
。これは、拡張が発生した後の各実際のコマンドの実行を示しています。set +x
完了したら、デバッグモード()を無効にすることを忘れないでください。
$ echo "aaa" >abc.1.txt
$ echo "bbb" >abc.2.txt
$ ls
abc.1.txt abc.2.txt
$ set -x
$ cp abc*
+ cp abc.1.txt abc.2.txt
$ cat abc.2.*
+ cat abc.2.txt
aaa
$echo "ccc" > abc.3.txt
+ echo ccc
$ cp abc*
+ cp abc.1.txt abc.2.txt acb3.txt
cp: target «acb3.txt» is not a directory
$ cat abc.2.*
+ cat abc.2.txt
aaa
$ cat abc*
+ cat abc.1.txt abc.2.txt abc.3.txt
aaa
aaa
ccc
$ set +x
+ set +x