Linuxにエラーはありません

Linuxにエラーはありません

エコー "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

関連情報