我编写了一个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,而不是整个字符串。我怎样才能做到这一点?任何帮助都将不胜感激。
编辑:
伊尼安回答后
for item in $@; do
case "$item" in
(*=*) eval "$item";;
esac
done

最佳答案

您可以通过引用"$@"并使用declare而不是eval来完成此操作:

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

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

关于linux - 解析bash脚本的输入参数时带空格的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41560611/

10-16 03:43