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 cp
comando 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.txt
ele tentará usar os três arquivos como parâmetros para cp
.
Você pode verificar tudo isso se definir o set -x
modo 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