bash - 在 Bash 中分配变量时如何替换“eval”
问题描述
我有一个函数myFunction()
,它应该从外部获取一个整数变量,打印它然后递增它。
这有效:
myFunction
:
myFunction() {
local var="${1}"
eval "printf '%s\n' \$$var"
eval "$var=$(($var+1))"
}
但是,我不想eval
在此使用,因为此函数的用户可能会输入错误的变量名,然后可能会执行该变量名。我想使用类似的东西,printf -v
因为它会使使用更安全。
我怎样才能做到这一点?
解决方案
如果您乐于枚举所有可能的变量名,您可以(仅?)在没有 eval 的情况下执行此操作。
myFunction () {
case $1 in
(frobme) printf '%s\n' $frobme; : $((++frobme));;
(zapme) printf '%s\n' $zapme; : $((++zapme));;
(*) printf 'invalid name: %s\n' "$1" >&2;;
esac
}
推荐阅读
- tomcat - Tomcat Catalina 日志文件自定义
- java - 来自 REST 的 @DateTimeFormat 变量给出 null
- javascript - 如何提取 div 文本以供以后在 Cypress 中使用?
- javascript - 如果子项在垂直列表中处于活动状态,则保持导航菜单打开
- django - Django & intercooler.js : 使用 Intercooler.js 将变量传递给视图
- amazon-web-services - 无法制作 S3 对象,使用 Lambda 从另一个账户上的 S3 存储桶复制,公共
- javascript - 我正在尝试将 JSON 对象发布到 ASP.NET MVC 控制器但得到空 JSON
- python - SMTPAuthenticationError: (535, b'5.7.8 用户名和密码不被接受。了解详情\n5.7.8 https://support.google
- magento - Magento 1.9:获取产品 X 是追加销售的产品
- exception - 为什么要在异常中使用多个捕获?