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

时间:2017-01-10 03:21:35

标签: linux bash shell terminal ubuntu-16.04

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

 sh test.sh param1='a' param2='b'

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

for item in $@; do
case $item in
(*=*) eval $item;;
esac
done

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

 param3='select * from'

只会将'select'分配给param3而不是整个字符串。我怎样才能做到这一点?任何帮助将不胜感激。

编辑:

在Inian的回答之后

for item in $@; do
case "$item" in
(*=*) eval "$item";;
esac
done

1 个答案:

答案 0 :(得分:3)

您可以引用"$@"并使用declare代替eval来执行此操作:

for item in "$@"; do
case $item in
(*=*) declare "$item" ;;
esac
done

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

运行它