我在Linux上使用bash shell。我有一个简单的脚本...
#!/bin/bash
TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP
但是,当我运行此脚本时,
./temp.sh
所有的输出都被打印出来,没有回车符/新行。不确定是我将输出存储到$TEMP的方式,还是echo命令本身。
如何将命令的输出存储到变量中并保留换行符/回车符?
2条答案
按热度按时间ulydmbyx1#
使用shell脚本时,需要始终对变量加引号,特别是在处理字符串时。
下面是一个问题的例子:
输出不带引号的变量:
输出WITH引用变量:
如果没有引号,shell将用
$TEMP
包含的字符(其中一个是换行符)替换$TEMP
。然后,在调用echo
之前,shell使用Internal Field Separator
(IFS)将该字符串拆分为多个参数,并将结果参数列表传递给echo
。默认情况下,IFS
设置为空白(空格、制表符和换行符),因此shell将$TEMP
字符串分割为参数,并且永远看不到换行符,因为shell将其视为分隔符,就像空格一样。ecbunoof2#
我遇到了同样的问题,引用一句会有帮助