【问题标题】:How to nest bash command output into an array inline?如何将 bash 命令输出嵌套到内联数组中?
【发布时间】:2016-12-13 08:34:37
【问题描述】:

注意 - 这不是重复的!还有其他问题涉及将 bash 输出转换为 bash 数组 - 但没有一个是内联的。您需要内联的原因是因为until。

我正在尝试编写一个 until 命令来解析来自 dig 命令的端口。

以下是单独的行中的工作命令。

SERVER_DIG_RESULT=$(dig +noall +answer $SERVER_DNS_NAME SRV )
SERVER_STRING_ARRAY=($SERVER_DIG_RESULT)
SERVER_PORT=${SERVER_STRING_ARRAY[6]}
until nc -z $SERVER_DNS_NAME $SERVER_PORT

这样做的问题是,在运行第一个dig 命令之前,dns 可能不会在线,因此您希望until 命令一遍又一遍地运行dig。

这是我损坏的 until 命令(我尝试将它放在一行上)。

until nc -z $SERVER_DNS_NAME ${$(dig +noall +answer $SERVER_DNS_NAME SRV)[6]}

我似乎遇到了变量替换的问题。 我的问题是:如何将 bash 命令输出嵌套到内联数组中?

【问题讨论】:

  • 没试过,但是,你确定这会返回一个数组吗? $(dig +noall +answer $SERVER_DNS_NAME SRV)?不应该是这样的吗? ${($(dig +noall +answer $SERVER_DNS_NAME SRV))[6]}
  • 命令替换本身不提供数组,但其以空格分隔的单词为分配给SERVER_STRING_ARRAY 提供了元素。

标签: arrays bash dig variable-substitution


【解决方案1】:

until 语句的条件不限于单个命令。

until SERVER_STRING_ARRAY=( $(dig +noall +answer "$SERVER_DNS_NAME" SRV)
      SERVER_PORT=${SERVER_STRING_ARRAY[6]}
      nc -z "$SERVER_DNS_NAME" "$SERVER_PORT"; do
    ...
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2019-04-12
    • 2012-07-10
    • 2017-10-12
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多