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
字符串中被替换,因此上面的循环将返回
### wanted result
1
2
我知道还有其他策略可以实现这一点,但我想知道是否有特定的方法可以在字符串中重新加载变量
非常感谢您的帮助!
解决方案
您可以使用 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
推荐阅读
- google-cloud-platform - 仅使用 JSON API 检索 Google Cloud 对象的元数据?
- svg - SVG - 带有背景颜色和圆角边框的文本
- python - 如何使用 CodeHS 8.4.13: Owls, Part 2 的枚举函数?
- bash - 逐行应用字符串替换
- angular - NGRX 过滤器导致 ExpressionChangedAfterItHasBeenCheckedError
- javascript - javascript中未填写字段时如何显示错误消息?
- ruby - 总是在“捆绑执行”之前“捆绑安装”?
- php - 如何使所有html标签与php在同一行中关闭
- python - 如何简化具有索引比较的嵌套循环?
- arduino - 如何知道我的 esp8266 的 ssid 和密码?AT 命令不起作用。我如何知道 CWJAP 用户名和密码?