解析 bash 脚本的输入参数时带有 space 的参数
Arguments with space when parsing input parameters for bash script
我写了一个 bash 脚本,它按名称获取参数并读取键值对中的值。下面是我如何 运行 我的脚本的示例。
sh test.sh param1='a' param2='b'
然后我在脚本中引用 $param1 和 $param2 等输入参数。下面是我为此编写的脚本。
for item in $@; do
case $item in
(*=*) eval $item;;
esac
done
但是当参数的值中有space时,它只取space之前的部分。
param3='select * from'
只会将 'select' 分配给 param3 而不是整个字符串。我怎样才能做到这一点?任何帮助将不胜感激。
编辑:
Inian 回答后
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
我写了一个 bash 脚本,它按名称获取参数并读取键值对中的值。下面是我如何 运行 我的脚本的示例。
sh test.sh param1='a' param2='b'
然后我在脚本中引用 $param1 和 $param2 等输入参数。下面是我为此编写的脚本。
for item in $@; do
case $item in
(*=*) eval $item;;
esac
done
但是当参数的值中有space时,它只取space之前的部分。
param3='select * from'
只会将 'select' 分配给 param3 而不是整个字符串。我怎样才能做到这一点?任何帮助将不胜感激。
编辑:
Inian 回答后
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