解析 bash 脚本的输入参数时带有空格的参数

may*_*ran 3 linux bash shell terminal ubuntu-16.04

我编写了一个 bash 脚本,它按名称获取参数并读取键值对中的值。下面是我如何运行脚本的示例。

 sh test.sh param1='a' param2='b'
Run Code Online (Sandbox Code Playgroud)

然后,我在脚本中引用 $param1 和 $param2 等输入参数。下面是我为此编写的脚本。

for item in $@; do
case $item in
(*=*) eval $item;;
esac
done
Run Code Online (Sandbox Code Playgroud)

但是当参数值中有空格时,它只取空格之前的部分。

 param3='select * from'
Run Code Online (Sandbox Code Playgroud)

只会将“select”分配给 param3 而不是整个字符串。我怎样才能实现这个目标?任何帮助将非常感激。

编辑 :

伊尼安回答后

for item in $@; do
case "$item" in
(*=*) eval "$item";;
esac
done
Run Code Online (Sandbox Code Playgroud)

tha*_*guy 5

您可以通过引用"$@"并使用declare而不是来做到这一点eval

for item in "$@"; do
case $item in
(*=*) declare "$item" ;;
esac
done
Run Code Online (Sandbox Code Playgroud)

但是,这现在是一个 bash 脚本,因此您必须使用bash test.sh而不是运行它sh test.sh