Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:被扩展星号弄糊涂了_Bash - Fatal编程技术网

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"