Linux 不是脚本的预期输出

Linux 不是脚本的预期输出,linux,bash,Linux,Bash,当我使用一个参数(例如./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

当我使用一个参数(例如./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

可能是缺少引号和空格:

通过命令执行:


./myCode hi hello

看起来唯一与您的-a选项相关的是hi。如果你只需要把hello和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))

请注意你需要回音的地方。我建议您在getopt上快速浏览一下。

…然后。。。发生了什么?请问,问题是什么?如果我运行这个代码时带有一个参数:./getopts-ahi hello,它会打印hi-a。我该如何打印hi HELLO该评论应该是您的问题帖子的一部分。问题及其主要细节应该是问题帖子本身的一部分,而不是评论。
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))