линукс без ошибок

линукс без ошибок

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

Связанный контент