linux - 在循环中处理 bash 参数时如何使用分配语法?
问题描述
我有以下循环来读取和设置传递给 bash 脚本的变量
while [ $# -gt 0 ]; do
if [[ $1 == *"--"* ]]; then
param="${1/--/}"
declare $param="$2"
# echo $1 $2 // Optional to see the parameter:value result
fi
shift
done
例如,可以通过以下方式调用它:
sh test.sh --name myname --family myfamily
如何将其更改为:
sh test.sh --name=myname --family=myfamily
解决方案
您可以在 bash 中使用变量内容替换语法在多个子字符串中“排列”一个参数。第一个子字符串是--(您已经删除了)第二个子字符串是变量名,第三个是=,最后一个是变量内容。
这可以通过对脚本稍作修改来完成:
while [ $# -gt 0 ]; do
if [[ $1 == *"--"* ]]; then
param="${1/--/}"
value="${param##*=}"
param="${param%%=*}"
declare $param="$value"
echo variable name: $param
eval echo variable content: '$'"$param"
fi
shift
done
这样,如果我将这些参数提供给新脚本:
sh test.sh --name=myname --family=myfamily
我得到以下输出:
variable name: name
variable content: myname
variable name: family
variable content: myfamily
推荐阅读
- php - 如果声明无法和禁用
- node.js - node-red Mqtt,如何关闭套接字连接
- python - 从 Pandas DataFrame 中绘制 OLHCV,颜色蜡烛和体积为水平线
- spring-boot - 是否可以将 Spring Boot 应用程序部署到 App Engine 并连接到数据库?
- powershell - 我的 AD 用户没有使用 powershell 和 csv 进行更新
- php - ddos挑战页面的两台服务器之间的通信?
- c# - 如何在没有实体模型的 Asp.net Core Web API 中使用 OData?
- flutter - 如何将参数传递给 Flutter 中的侦听器?
- rest - 从 Google Play 获取应用 alpha/beta 版本号
- java - Java 8 流 - 在嵌套地图上过滤并重建