我在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命令本身的方式。
如何将命令的输出存储到变量并保留换行符/回车符?
引用 您的变量。原因如下:
$ f="fafafda > adffd > adfadf > adfafd > afd" $ echo $f fafafda adffd adfadf adfafd afd $ echo "$f" fafafda adffd adfadf adfafd afd
不带引号的外壳将替换$TEMP为其包含的字符(其中之一是换行符)。然后,在调用echoshell 之前,先使用Internal Field Separator(IFS)将该字符串拆分为多个参数,然后将所得的参数列表传递给echo。默认情况下,IFS设置为空白(空格,制表符和换行符),因此Shell将您的$TEMP字符串切成参数,并且永远也看不到换行符,因为Shell会将其视为分隔符,就像空格一样。
$TEMP
echo
Internal Field Separator
IFS