Bash:通过扩展星号感到困惑

时间:2014-11-13 10:04:26

标签: bash

我有一个非常简单的脚本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

感谢。

1 个答案:

答案 0 :(得分:2)

规则#1,引用你的变量!

echo "$(cat data)"

data="$data $line"

echo "$data"

虽然在下面的注释中指出gniourf_gniourf(自删除后),但实际上不需要三个更改中的第二个,因为在变量赋值期间不会发生全局扩展。

也就是说,如果您只想打印文件的内容,则根本不需要使用命令替换或read循环。为什么不使用cat data

或者,要将文件的内容存储到变量,只需使用data="$(cat data)"(引号在此处很重要),或者按照上面的评论中的建议gniourf_gniourf,data="$(< data)"

相关问题