Заставить эхо проигнорировать пробелы?

У меня есть файл, названный 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 распечатайте то же самое---формат, который я не хочу. Терминал и сценарий ведут себя по-другому. Какая-либо работа вокруг для этого?

1
задан 28 June 2015 в 00:43

2 ответа

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

# 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"

Это позволяет Вам безопасно заключать переменную в кавычки. Если Вы не заключаете переменную в кавычки, разделение слова не является единственной вещью, которая произойдет. Оболочка также попытается заменить слова именами файлов, если они будут содержать символы шарика как *, ?, [...].

1
ответ дан 11 November 2019 в 02:14

Вы не должны заключать в кавычки (") все в эхе. У Вас может быть много строк. Просто не заключайте prvar в кавычки:

echo "blah blah blah" $prvar

В оболочке (который разворачивает $prvar для Вас перед, эхо даже видит его), пробелы в кавычках (") сохраняются, но пробелы и вкладки вне кавычек уменьшаются до одного пространства. например,

echo "a        b"        d            e
a        b d e
0
ответ дан 11 November 2019 в 02:14

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

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