Bash - 使用变量替换命令

时间:2013-12-09 01:21:43

标签: bash variables

我仍然是bash的新手,所以我希望有比我更多经验的人能够帮助我。 我有以下代码:

DAY1=$(date +"%d/%b/%Y")
DAY2=$(date --date="-1 days" +"%d/%b/%Y")
...
DAY14=$(date --date="-13 days" +"%d/%b/%Y")
COUNT=0

我想要完成的是将替换命令称为

$DAY($COUNT+1)

从$ DAY1到$ DAY14生成变量。这段代码显然不起作用,但我需要一些关于如何实现这一点的想法。我使用一个循环来增加COUNT变量,如下所示:

for i in $(seq 1 14); do
  let COUNT+=1
done

2 个答案:

答案 0 :(得分:1)

您可以构造变量表达式并使用 eval 来执行命令。例如:

for i in {1..14}; do
  let COUNT+=1

  command=echo DAY${COUNT}
  eval $command

done

另一种可能更有意义的方法是使用bash数组。

答案 1 :(得分:1)

不要使用eval;进入这是一个坏习惯。如果您不想使用数组,请使用间接参数扩展。

DAY1=$(date +"%d/%b/%Y")
DAY2=$(date --date="-1 days" +"%d/%b/%Y")
...
DAY14=$(date --date="-13 days" +"%d/%b/%Y")

COUNT=7
var="DAY$COUNT"
echo "${!var}"   # Displays the value of $COUNT7