Как пропустить оценку амперсанда в командной строке?

Команда:

for file in { ls *. pdf} 
do
mv "$file" /destination /here 
done 

Итак, прежде чем делать это, вы должны перейти в свой каталог, где есть файлы.

1
задан 13 April 2017 в 17:35

2 ответа

Цитаты исправит это, но вы также можете избежать действий с помощью обратной косой черты:

echo http://whatever.com/?x=1\&y=2

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

7
ответ дан 25 May 2018 в 20:03

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

Двойные кавычки заменят специальные символы, такие как «$» и кавычки, тогда как одинарные кавычки лечат все это буквально, за исключением закрывающей одинарной кавычки.

Оба будут группировать текст вместе, что заставляет хром рассматривать его как один аргумент, а символы типа «; # & amp;» не имеют особого значения в этом контексте.

Это показывает использование '\' для избежания двойной кавычки в двойных кавычках и самой обратной косой черты:

mat@sen:~$ echo "a&bc\\#de\"f"
a&bc\#de"f

С одинарными кавычками ничего не меняется:

mat@sen:~$ echo 'a&bc\\#de\"f'
a&bc\\#de\"f

Без кавычек '& amp;' разделяет его на две команды:

mat@sen:~$ echo a&bc\\#de\"f
[1] 2619
a
bc\#de"f: command not found
[1]+  Done                    echo a
[1]+  Done                    echo a

Обычно, имея дело с одним типом цитаты, вы можете просто обернуть его другим типом, но у вас могут возникнуть проблемы с этим:

mat@sen:~$ echo "'a'bc$foo"
'a'bc

Одиночные кавычки не заменяются, но «$» есть. Следующий синтаксис работает, хотя:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo
1
ответ дан 25 May 2018 в 20:03

Другие вопросы по тегам:

Похожие вопросы: