首页 > 解决方案 > 在循环中处理 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

标签: linuxbash

解决方案


您可以在 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

推荐阅读