首页 > 解决方案 > 在另一个字符串中重新加载一个变量字符串

问题描述

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

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

非常感谢您的帮助!

标签: stringbasheval

解决方案


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

#!/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

推荐阅读