linux沒有錯誤

linux沒有錯誤

echo "aaa" >abc.1.txt echo "bbb" >abc.2.txt cp abc*

linux沒有錯誤

bug 相同的指令 [ cp abc.1.txt abc.2.txt]

cp abc.* = cp abc.1.txt abc.2.txt

為什麼?

答案1

這不是一個錯誤,而是 shell 變數表達式的預期行為。

正如 ulrich-schwarz 正確指出的那樣,變數擴展發生在命令cp執行之前。您有兩個滿足表達式條件的文件abc*,因此它會擴展為它們的全名。

事實上,如果您創建第三個文件,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

相關內容