我必须在循环开始时声明一个由不同变量组成的字符串,以便以后仅使用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
字符串中进行替换,因此上面的循环将返回
### wanted result
1
2
我知道还有其他策略可以实现这一点,但是我想知道是否有一种特定的方法可以在字符串中重新加载变量
非常感谢您的帮助!
"
中放入变量时,它会展开。对命令变量分配使用单引号。 $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
function
代替变量分配#!/usr/bin/env bash
a=0
command(){ echo "$1" ; }
for i in {1..2}; do
a="$i"
command "$a"
done
编辑:根据@glenn jackman
,可以使用全局变量
command(){ echo "$a"; }
并且只调用不带参数$a
的函数
command