Bash:被扩展星号弄糊涂了
我有一个非常简单的脚本,名为Bash:被扩展星号弄糊涂了,bash,Bash,我有一个非常简单的脚本,名为test.sh #!/bin/bash echo $(cat './data') while read line do data=$data' '$line done < './data' echo $data 但实际上bash(4.3.11)/dash(sh0.5.7)扩展了星号本身。它打印出来了 1 test.sh data 1 = 1 1 test.sh data 1 = 1 Zsh(5.0.2)不会这样做 我不知道为什么。如何使用bash打印
test.sh
#!/bin/bash
echo $(cat './data')
while read line
do
data=$data' '$line
done < './data'
echo $data
但实际上bash(4.3.11)/dash(sh0.5.7)扩展了星号本身。它打印出来了
1 test.sh data 1 = 1
1 test.sh data 1 = 1
Zsh(5.0.2)不会这样做
我不知道为什么。如何使用bash打印
1 * 1 = 1
谢谢。规则1,引用你的变量
echo "$(cat data)"
及
及
尽管正如下面的评论所指出的(自删除后),三个更改中的第二个实际上是不必要的,因为在变量赋值期间不会发生全局扩展
也就是说,如果您只想打印文件的内容,根本不需要使用命令替换或read
循环。为什么不直接使用cat数据
或者,要将文件内容存储到变量中,只需使用
data=“$(cat数据)”
(此处的引号很重要),或者如gniourf_gniourf在上面的评论中所建议的那样,data=“$(
@gniourf_gniourf谢谢。@gniourf_gniourf Yep<代码>回声这里没有用。这只是一个大问题的一部分。@jasonz请查看我的更新答案,我相信它解决了您的问题。谢谢<代码>回声这里没有用。它只是一个大型脚本的一部分,我将文件内容存储到一个变量中。
echo "$(cat data)"
data="$data $line"
echo "$data"