Linux команда и одинарная кавычка - PullRequest
0 голосов
/ 27 марта 2020

Мне показалось, что одинарные кавычки просто резервируют буквальное значение каждого символа в кавычках и не влияют на результат команды, за исключением тех ситуаций, в которых экранируются символы.

Например, две приведенные ниже команды вернули тот же результат.

$ ls /home/testuser/tmp1
$ ls '/home/testuser/tmp1'

Эта команда, приведенная ниже, выполнена успешно.

$ cp /home/testuser/tmp1/* /home/testuser/tmp2

Однако приведенная ниже команда завершилась с ошибкой.

$ cp '/home/testuser/tmp1/*' /home/testuser/tmp2 
cp: cannot stat '/home/testuser/tmp1/*': No such file or directory

Что я сделал не так здесь

1 Ответ

0 голосов
/ 27 марта 2020

* - это то, что вы называете ситуацией выхода персонажа. Поскольку вы сохранили буквальное значение *, оно утратило значение «все файлы», и вместо этого cp пытается скопировать файл с буквальным именем *.

При запуске:

cp /home/testuser/tmp1/* /home/testuser/tmp2 

Оболочка будет прозрачно переписывать его в:

cp /home/testuser/tmp1/bar /home/testuser/tmp1/foo /home/testuser/tmp2 

Этот процесс известен как «расширение пути» или «глобализация». Когда вы цитируете *, эта перезапись не происходит.

...