以下代码在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
getopts
认为选项l
具有5.0.3-0 -s 4.0-0 -b 010
作为自变量。
我做错了什么?
我试着玩:
和选项,但正如我所理解的,我必须把它们放在选项后面,对吗?getopts
自然知道-
是参数的分隔符。
$> echo $BASH_VERSION
$> 3.2.25(1)-release
2条答案
按热度按时间q3aa05251#
正如Cyrus在评论中指出的,问题在于我如何传递参数。
正确的做法是:
因为“$options”不会考虑空格,而是将整个字符串作为单个参数。
nqwrtyyt2#
它对我很有效。你可以通过在shell中输入“man bash”并搜索来阅读更多关于GETOPTS、OPTARG以及while循环和case语句的内容。
输出量: