【问题标题】:Shell session variable does not assign valueShell 会话变量未赋值
【发布时间】:2013-12-22 12:13:39
【问题描述】:

我试图弄清楚为什么该变量没有在开发环境(AIX 6.1)中存储以下命令的值:

> DBSIZE=`db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)" | grep -p DATABASESIZE
> | grep Value | cut -c21-`

如果我执行echo $DBSIZE,它会检索空白,没有任何值。

但是,当我只运行命令时

db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)" | grep -p DATABASESIZE | grep Value | cut -c21-

它检索值。

另外,我在 prod 环境中执行了同样的操作(AIX 6.1 也是),它运行良好!

有什么线索吗??

提前致谢。

【问题讨论】:

    标签: variables sh aix


    【解决方案1】:

    无法告诉您确切问题是什么,但是,如果您将其分解为多个部分,您至少能够确定问题出在哪里:

    DBSIZE=`db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)"`
    echo "$DBSIZE"
    DBSIZE=`db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)" | grep -p DATABASESIZE`
    echo "$DBSIZE"
    DBSIZE=`db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)" | grep -p DATABASESIZE | grep Value`
    echo "$DBSIZE"
    

    等等。

    可能想尝试的一件事(如果该命令确实如图所示跨行拆分)是放在一行上。我似乎记得有些 shell 在反引号命令中嵌入换行符有问题。如果第一行可以看作是一个完整的命令,它有时会将其视为两个单独的命令,而以| 开头的一个会导致问题。

    【讨论】:

    • 我按照你建议的方式进行,变量卡在第一个管道|。显示了GET_DBSIZE_INFO 过程的值,但在使用| grep -p 过滤后,该变量不再显示任何内容。奇怪的是,在两种环境(相同的操作系统)上做同样的事情,它只能在一个环境中工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多