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

问题描述 投票:0回答:2

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

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

非常感谢您的帮助!

string bash eval
2个回答
1
投票
当您在"中放入变量时,它会展开。对命令变量分配使用单引号。

$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


2
投票
您可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.