【发布时间】:2017-04-07 06:51:24
【问题描述】:
下面的代码在subscript.sh中执行,subscript.sh在primaryscript.sh里面运行
#### primaryscript.sh
#! /bin/bash
#...
"$bss_path"/subscript.sh "$option"
#...
我正在使用这段代码来解析我的参数及其值:
#### subscript.sh
#! /bin/bash
while getopts "hw:l:s:b:" opt; do
case $opt in
w)
x="$OPTARG";;
l)
xx="$OPTARG";;
s)
xxx="$OPTARG";;
b)
xxxx="$OPTARG";;
h)
print_usage
exit 0;;
\?)
echo "Invalid option: -$OPTARG"
exit 1;;
esac
done
当我用多个参数调用我的脚本时出现问题:
./myscript -l 5.0.3-0 -s 4.0-0 -b 010
getops 认为选项 l 有 5.0.3-0 -s 4.0-0 -b 010 作为参数。
我做错了什么?
我试图玩弄: 和选项,但据我所知,我必须将它们放在选项后面,对吗?
而getops自然知道-是参数的分隔符。
$> echo $BASH_VERSION
$> 3.2.25(1)-release
【问题讨论】:
-
使用 bash 3.1.17(来自 RHEL 5)和 4.2.8(来自 Ubuntu 11.04):如果我将其添加为最后一行,它对我来说很好:
echo -e "w: $x\nl: $xx\ns: $xxx\nb: $xxxx" -
添加执行这个 scipt 的行并显示这个脚本的 shebang。顺便提一句。您的脚本适用于 bash、sh、dash 和 zsh。
-
您的问题变得非常不清楚。您可以编辑它,删除“EDIT1” ....段落,然后向我们展示您在调用 getopts 循环之前所做的操作吗?
-
删除引号:
"$option" -
哦,快。我怎么能错过这个。非常感谢赛勒斯。
标签: bash shell parsing arguments getopts