我有一个名为 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