传递命令在函数中执行

Pass command to execute in function

在 bash 函数中向 运行 发送命令 return 错误的结果。我相信这是由于 " 但不确定。尝试用 $@$() 和 `$1` 替换 $*

#!/bin/bash

a(){

        status=unknown
        while [[ "$status" != "available" ]]; do
                aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query "DBClusters[0]|Status"

                $* > /tmp/aaa.out
                #status=``
                #status=$()
                #$@ > /tmp/aaa.out
                echo ""
                echo "$status"
                cat /tmp/aaa.out
                sleep 10

        done

}
aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query "DBClusters[0]|Status"
a "aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query \"DBClusters[0]|Status\""

returns:

available
available
aws rds describe-db-clusters --db-cluster-identifier=qa-cls  --query "DBClusters[0]|Status"
unknown
None

在您的函数中使用 "$@" 并删除传递给 a:

的参数周围的引号
a aws rds describe-db-clusters --db-cluster-identifier=qa-cls --query "DBClusters[0]|Status"

函数的参数是一个数组,正确表示为 "$@"。没有引号($@$*)你会得到奇怪的行为(分词)并且 "$*" 将数组转换为单个字符串。

一些建议: