![linux沒有錯誤](https://rvso.com/image/122432/linux%E6%B2%92%E6%9C%89%E9%8C%AF%E8%AA%A4.png)
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