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 番目のファイルを作成すると、abc.3.txtその 3 つのファイルを のパラメータとして使用しようとします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

関連情報