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

相关内容