Я хочу поместить строку (содержащую специально !
знак) в переменную, скажем,
var="!f then"
Затем я хочу отобразить строку или использовать ее в другом месте:
echo $var
Но когда я вхожу с var="!f then"
, это дает следующее:
var="for f in Tor*; do mv "$f" "$f-Win"; done then"
Если я использую escape как var="\!f then"
, то в строке также появляется escape-символ.
$ echo $var
\\!f then
Как я могу использовать !
как элемент в строке?
Это bash
Расширение истории , которое вы испытываете:
!string
Refer to the most recent command preceding the current position
in the history list starting with string.
Как я объясняю здесь , расширение истории выполняется внутри двойных кавычек, поэтому два способы цитаты остаются для !
:
var=\!f\ then # either use <b>only</b> backslash
var='!f then' # or just single quotes
Символ !
является специальным символом, который bash
использует для введения команды истории (см. man bash
), и используется как !!
для повторного выполнения следующей команды. Вместо этого используйте \!
.