让回声忽略空格?

让回声忽略空格?

我有一个名为 temp1 的文件

   sCellEventTrap-03-27 TRAP-类型 -- CAC 代码:01
        企业 康柏
        变量 { scellNameDateTime,
                     scellSW组件,
                     scellE代码,
                     细胞CAC,
                     }
        描述
             “严重性:严重 - 故障或即将发生故障。物理磁盘驱动器遇到 ID 块不一致的情况。”
           --#TYPE "存储单元事件"
           --#SUMMARY “SCellName-TimeDate %s:SWCID %d:ECode:%d:CAC %d:EIP %d。”
           --#参数{0,1,2,3,4,}
           --#严重程度严重
           --#时间索引 136
           --#国家警告
        ::= 13600807

将其应用于 temp1

prvar=$(awk'/VARIABLES/,/DESCRIPTION/{gsub("VARIABLES"," "); gsub("DESCRIPTION"," "); gsub("}"," "); gsub("{"," ");gsub(","," ");print;print":%s"}' temp1)

给我(我想要的)

回显$prvar

scellNameDateTime:%s scellSWComponent:%s scellECode:%s scellCAC:%s scellEIP:%s:%s

但是这个(格式不想要)

回显“$prvar”

             单元格名称日期时间
:%s
                     scellSW组件
:%s
                     细胞E代码
:%s
                     细胞CAC
:%s
                     细胞EIP
:%s

:%s

我将与这样的文本一起prvar使用echo

回声“blah blah blah $prvar”

这样做我得到了

等等等等 scellNameDateTime
:%s
                     scellSW组件
:%s
                     细胞E代码
:%s
                     细胞CAC
:%s
                     细胞EIP
:%s

:%s

我想要打印的内容

等等等等 scellNameDateTime :%s scellSWComponent :%s scellECode :%s scellCAC :%s scellEIP :%s :%s

使用""prvar 时echo会产生问题。我该怎么做才能使 prvar 以上述格式打印?

编辑
echo "$prvar"事实证明,无论我在脚本中输入什么内容并打印相同的内容 ,都没有区别echo $prvar--- 我不想要的格式。终端和脚本的行为不同。有什么解决办法吗?

答案1

您可以使用参数扩展和扩展的 glob 来“规范化”空格。

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

这样您就可以安全地引用变量。如果您不引用变量,则不仅会发生分词。如果单词包含诸如*?、之类的通配符,shell 还会尝试用文件名替换单词[...]

答案2

您不必在 echo 中用引号 (") 括住所有内容。您可以有多个字符串。只需不要引用 prvar:

echo "blah blah blah" $prvar

在 shell 中(在 echo 看到它之前它就已经为您扩展了 $prvar),引号(“)内的空格会被保留,但引号外的空格和制表符会缩减为一个空格。例如

echo "a        b"        d            e
a        b d e

相关内容