У меня есть файл, названный temp1
sCellEventTrap-03-27 TRAP-TYPE -- CAC Code: 01 ENTERPRISE compaq VARIABLES { scellNameDateTime, scellSWComponent, scellECode, scellCAC, scellEIP} DESCRIPTION "Severity: Critical -- failure or failure imminent. A physical disk drive has experienced an ID block inconsistency." --#TYPE "StorageCell Event" --#SUMMARY "SCellName-TimeDate %s : SWCID %d : ECode: %d : CAC %d : EIP %d." --#ARGUMENTS {0,1,2,3,4,} --#SEVERITY CRITICAL --#TIMEINDEX 136 --#STATE WARNING ::= 13600807
Применение этого на temp1
$ prvar= (awk '/VARIABLES/,/DESCRIPTION/{gsub ("ПЕРЕМЕННЫЕ"", "); gsub ("ОПИСАНИЕ"", "); gsub ("} "," "); gsub (" {"," "); gsub (""", ");печать; печать ": %s"}' temp1)
Дает мне (что я хочу),
echo $prvar scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s
Однако это (формат, не требуемый)
echo "$prvar" scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s
Я должен использовать prvar
в echo
наряду с текстом как это
повторите "и тому подобное $prvar"
Выполнение этого, что я получаю
blah blah blah scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s
Что я хочу, чтобы это распечатало
blah blah blah scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s
""
на prvar при использовании echo
создайте проблему. Что я могу сделать так, чтобы prvar был распечатан в справедливом выше формата?
Править
Хорошо оказывается, что это не имеет значения вообще, я ввожу в своем СЦЕНАРИИ echo "$prvar"
и echo $prvar
распечатайте то же самое---формат, который я не хочу. Терминал и сценарий ведут себя по-другому. Какая-либо работа вокруг для этого?
Можно использовать расширение параметра и расширенный шарик для "нормализования" пробела.
# enable extended globs so that +([[:space:]]) matches one or more whitespace
shopt -s extglob
# replace all occurances of one or more whitespace with a single space
prvar=${prvar//+([[:space:]])/ }
echo "blah blah blah $prvar blah blah"
Это позволяет Вам безопасно заключать переменную в кавычки. Если Вы не заключаете переменную в кавычки, разделение слова не является единственной вещью, которая произойдет. Оболочка также попытается заменить слова именами файлов, если они будут содержать символы шарика как *
, ?
, [...]
.
Вы не должны заключать в кавычки (") все в эхе. У Вас может быть много строк. Просто не заключайте prvar в кавычки:
echo "blah blah blah" $prvar
В оболочке (который разворачивает $prvar для Вас перед, эхо даже видит его), пробелы в кавычках (") сохраняются, но пробелы и вкладки вне кавычек уменьшаются до одного пространства. например,
echo "a b" d e
a b d e