在另一个字符串中重新加载一个变量字符串

reload a variable string inside another string

我必须在循环开始时声明一个由不同变量组成的字符串,以便稍后使用 eval $command >> file.txt 打印它,避免每次字符串 $command 本身都重新输入。但是我的 $command 字符串由其他变量组成,我需要能够在打印前更新它们。这里有一个简单的例子:

a=0
command="echo \"$a\""
for i in {1..2}; do
    ### change variable $a
    a="$i"
    ### print command with the new $a
    eval "$command"
done

### (it fails) result:
0
0

我需要每次都重新加载 $a 以便在 $command 字符串中替换,因此上面的循环将 return

### wanted result
1
2

我知道还有其他策略可以实现这一点,但我想知道是否有一种特定的方法可以在字符串中重新加载变量

非常感谢您的帮助!

您可以使用 function 而不是变量赋值

#!/usr/bin/env bash

a=0 
command(){ echo "" ; }

for i in {1..2}; do
  a="$i" 
  command "$a"
done

编辑:根据@glenn jackman,可以使用全局变量

command(){ echo "$a"; }

并且只调用不带参数的函数$a

command

当您将变量放入 " 时,它会展开。使用单引号进行命令变量赋值。

$a=0
$command="echo \"$a\""
$echo $command 
echo "0"
$command='echo \"$a\"'
$echo $command 
echo \"$a\"
$

尝试

a=0
command='echo $a'
for i in {1..2}; do
    ### change variable $a
    a="$i"
    ### print command with the new $a
    eval "$command"
done