当我使用./getopts -a
这样的参数运行此代码时,它会打印“hi -a"
,但预期输出会为"hi hello"
。任何想法都会出错?
#!/bin/bash
while getopts a:name
do
case $name in
a)aopt=$OPTARG;;
*)echo "Invalid arg";;
esac
done
if [[ ! -z $aopt ]]; then
echo $aopt
fi
shift $(($OPTIND - 1))
#exit 0
答案 0 :(得分:0)
可能是你缺少引号和空格:
while getopts "a:" name; do echo "name=$name"; case $name in a)aopt=$OPTARG;; *)echo "Invalid arg";; esac done if [[ ! -z $aopt ]]; then echo $aopt fi shift $(($OPTIND - 1))
通过命令执行:
./myCode"嗨你好"
答案 1 :(得分:0)
看起来与-a
选项绑定的唯一问题是hi
。如果您只需要将hello
与-a hi
一起提取,则可以使用$ 3从命令行中提取它。
while getopts "a:" name; do
case $name in
a)aopt=$OPTARG;;
*)echo "Invalid arg";;
esac
done
if [[ ! -z $aopt ]]; then
echo "$aopt $3"
fi
shift $(($OPTIND - 1))
请注意""你需要回应什么。我建议你看看http://www.bahmanm.com/blogs/command-line-options-how-to-parse-in-bash-using-getopt,快速了解一下getopt。