在另一个字符串中重新加载一个变量字符串
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
我必须在循环开始时声明一个由不同变量组成的字符串,以便稍后使用 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