我想从文件中读取一个字符串并将其打印如下:
LINE=tr '\n' ' ' < $FILENAME
x1=$LINE
echo $LINE
但命令echo $LINE
显示空行?
答案 0 :(得分:2)
您应该使用命令替换,如下所示:
LINE=$(tr '\n' ' ' < "$FILENAME")
但这会将tr的输出存储到LINE
变量中。
答案 1 :(得分:2)
正如其他海报已经指出的那样,要将tr
命令的输出嵌入到另一个命令(在本例中为LINE=...
)中,请tr
命令包围$(...)
命令}}。在bash中,这被称为command substitution。
LINE=$(tr '\n' ' ' < "$FILENAME")
如果您打算将$LINE
用作后续命令的参数序列(在本例中为echo
),则在word splitting期间新行最终会被空格替换。这会使tr
多余;你不妨这样做:
LINE=$(cat "$FILENAME")
甚至更好:
LINE=$(< "$FILENAME")
单词分词在双引号内无效;因此echo "$LINE"
仍然需要tr
才能删除换行符。
答案 2 :(得分:1)
我认为您需要使用反引号调用tr
命令:
LINE=`tr '\n' ' ' < $FILENAME`