linux sem erro

linux sem erro

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

linux sem erro

bug mesmo comando [cp abc.1.txt abc.2.txt]

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

por que?

Responder1

Isso não é um bug, é o comportamento pretendido para a expressão de variáveis ​​​​do shell.

Como ulrich-schwarz afirmou corretamente, a expansão da variável acontece antes do seu cpcomando ser executado. Você tem dois arquivos que atendem à condição da expressão abc*, portanto ela é expandida para seus nomes completos.

Na verdade, se você criar um terceiro arquivo, abc.3.txtele tentará usar os três arquivos como parâmetros para cp.

Você pode verificar tudo isso se definir o set -xmodo debug() antes de executar o comando, que mostra cada comando real conforme ele é executado, após a expansão acontecer. Lembre-se de desabilitar o modo de depuração ( set +x) quando terminar.

$ 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

informação relacionada