![линукс без ошибок](https://rvso.com/image/122432/%D0%BB%D0%B8%D0%BD%D1%83%D0%BA%D1%81%20%D0%B1%D0%B5%D0%B7%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA.png)
echo "aaa" >abc.1.txt echo "bbb" >abc.2.txt cp abc*
линукс без ошибок
ошибка та же команда [ cp abc.1.txt abc.2.txt]
cp abc.* = cp abc.1.txt abc.2.txt
почему?
решение1
Это не ошибка, а предполагаемое поведение выражения переменной оболочки.
Как правильно заметил 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