сохранение строки (особенно! sign) в переменной и ее отображение

Я хочу поместить строку (содержащую специально ! знак) в переменную, скажем,

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

Как я могу использовать ! как элемент в строке?

1
задан 28 December 2017 в 11:43

2 ответа

Это 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
1
ответ дан 28 December 2017 в 11:43
  • 1
    Верный... мои временные планы для debian распределения, хотя в будущем я попытаюсь упаковать его для других дистрибутивов. – nik90 30 May 2012 в 22:07
  • 2
    Верный... мои временные планы для debian распределения, хотя в будущем я попытаюсь упаковать его для других дистрибутивов. – nik90 30 May 2012 в 22:07

Символ ! является специальным символом, который bash использует для введения команды истории (см. man bash), и используется как !! для повторного выполнения следующей команды. Вместо этого используйте \!.

0
ответ дан 28 December 2017 в 11:43

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

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