从bash中的case语句调用时不执行命令

从bash中的case语句调用时不执行命令,bash,shell,variables,Bash,Shell,Variables,我被卡住了,正在尝试解决为什么case语句中的命令不能在这个bash脚本中执行的问题 如果我将命令复制并粘贴到命令行中,并对值进行硬编码,它将起作用。 例子: psql-h mycluster-1.us-east-1.redshift.amazonaws.com-U masteruser-d dev-p 5439-v v1=foo_bar-f getTableDetails.sql 在脚本中,我将命令封装在括号内,以解决可能出现的空白问题: #!/usr/local/bin/bash

我被卡住了,正在尝试解决为什么case语句中的命令不能在这个bash脚本中执行的问题

如果我将命令复制并粘贴到命令行中,并对值进行硬编码,它将起作用。 例子: psql-h mycluster-1.us-east-1.redshift.amazonaws.com-U masteruser-d dev-p 5439-v v1=foo_bar-f getTableDetails.sql

在脚本中,我将命令封装在括号内,以解决可能出现的空白问题:

    #!/usr/local/bin/bash

    set -e
    set -x


    cluster_to_endpoint() {
      case "$1" in
        c01)
          RUNCMD=$(psql -h mycluster-1.us-east-1.redshift.amazonaws.com -U masteruser -d dev -p 5439 -v v1="$NAME" -f getTableDetails.sql)
          ;;
        c02)
          RUNCMD=$(psql -h mycluster-2.us-east-1.redshift.amazonaws.com -U masteruser -d dev -p 5439 -v v1="$NAME" -f getTableDetails.sql)
          ;;
      esac
    }


    while getopts ":c:n:" opt; do
      case $opt in
        c) cluster="$OPTARG";;
        n) name="$OPTARG";;
        *) usage
           exit 1
           ;;
      esac
    done
我像这样执行脚本:./myscript.sh-cc01-nfoo\u bar

我还尝试过删除以下内容:

看起来变量已经设置好了

$ ./myscript.sh -c c01 -n foo_bar
+ getopts :c:n: opt
+ case $opt in
+ cluster=c01
+ getopts :c:n: opt
+ case $opt in
+ name=foo_bar
+ getopts :c:n: opt

那么为什么命令没有执行呢?谢谢。

未执行的命令位于一个从未调用的函数cluster\u to\u endpoint中。

是的,忘了在末尾添加它。成功了。谢谢
$ ./myscript.sh -c c01 -n foo_bar
+ getopts :c:n: opt
+ case $opt in
+ cluster=c01
+ getopts :c:n: opt
+ case $opt in
+ name=foo_bar
+ getopts :c:n: opt