我有一个非常简单的脚本test.sh
。
#!/bin/bash
echo $(cat './data')
while read line
do
data=$data' '$line
done < './data'
echo $data
data
文件:
1 * 1 = 1
但实际上bash(4.3.11)/ dash(sh 0.5.7)扩展了星号本身。打印出来
1 test.sh data 1 = 1
1 test.sh data 1 = 1
Zsh(5.0.2)不会这样做。
我不知道为什么。如何使用bash
打印出来1 * 1 = 1
感谢。
答案 0 :(得分:2)
规则#1,引用你的变量!
echo "$(cat data)"
和
data="$data $line"
和
echo "$data"
虽然在下面的注释中指出gniourf_gniourf(自删除后),但实际上不需要三个更改中的第二个,因为在变量赋值期间不会发生全局扩展。
也就是说,如果您只想打印文件的内容,则根本不需要使用命令替换或read
循环。为什么不使用cat data
?
或者,要将文件的内容存储到变量,只需使用data="$(cat data)"
(引号在此处很重要),或者按照上面的评论中的建议gniourf_gniourf,data="$(< data)"
。