【发布时间】:2017-01-10 03:21:34
【问题描述】:
我编写了一个 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
【问题讨论】:
-
您是否考虑过将它们作为变量传递,例如
param1='a' param2='b' sh test.sh?这将使echo "$param1"无需解析即可立即使用 -
使用 $@ 或 $* 而不用双引号括起来不是一个好主意。当您的字符串中包含特殊字符(如空格和通配符)时,它会出现异常。
标签: linux bash shell terminal ubuntu-16.04