具有"的数组之间的差异"和()在bash脚本中?

时间:2016-02-13 07:35:55

标签: arrays string bash shell

我有两个bash脚本示例。我所做的只是使用Map[Int, Set[Int]]来替换文件中的一些字符串。运行脚本时指定该文件。因此,您可以像sed一样运行它。

./replace_file.sh input_file

hug="g h 7"

for elm in $hug
do
  echo "replacing $elm"
  sed -i'_backup' "s/$elm/BOO/g" $1
done

上面的第一个脚本,回显如下:

hug=('g' 'h' '7')

for elm in $hug
do
  echo "replacing $elm"
  sed -i'_backup' "s/$elm/BOO/g" $1
done

但是,第二个在replacing g replacing h replacing 7 之后停止。我不清楚为什么。有人可以解释一下吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

如注释中所述,当您尝试通过调用for elm in $hug迭代数组中的元素时,您只是引用数组中的第一个元素。要迭代数组中的元素,可以使用数组语法,例如${array[@]}按顺序访问每个元素(您可以引用数组以保留元素中的空格。)在您的情况下,您只需要:

#!/bin/bash

hug=('g' 'h' '7')

for elm in ${hug[@]}
do
echo "replacing $elm"
# sed -i'_backup' "s/$elm/BOO/g" $1
done

<强>输出

$ bash arrayiter.sh
replacing g
replacing h
replacing 7