编辑

编辑

值=${VAR| |o}

我在 shell 脚本中发现了这个变量赋值。我不明白为什么||这里使用了符号。

编辑

给出的代码一条评论:

#!/bin/bash
source /opt/cpf/bin/cpf_logging_helper.sh
STATE=$1
DNS_MASTER=${TEST.DNS.DNS_MASTER:-o}
service status dns > /dev/null
rval=$?
if [ $rval -eq 0 ]
then
    if [ $DNS_MASTER == `hostname -s` ]
    then
        echo "1"
    else
        echo "2"
    fi
fi

答案1

看来原始编码器打算使用$VARor的值(o如果它未设置)。可以通过bash使用以下方法来实现:

VALUE=${VAR:-o}

另请参阅man bash并搜索Parameter Expansion:-

答案2

该结构:VALUE=${VAR| |o}在 dash、bash、ksh 和 zsh 中无效。

如果| |实际上是一个/ /then 它可能(?)在 bash 中有意义。

这意味着:用 替换第一次出现的空格o

这是否是一个合理的替代是另一回事。我不相信是这样。

在编辑中添加的代码中,点在变量名称中无效,无论是在 dash、bash 或 zsh 中,还是在 ksh 中的非常特定条件下。
这在 bash 中会失败:

DNS_MASTER=${TEST.DNS.DNS_MASTER:-o}

此外,由于空格以及未执行主机名命令,此测试不正确:

if [ $DNS_MASTER == hostname -s ]

使用:

if [ "$DNS_MASTER" == "$(hostname -s)" ]

总之,您提供的代码在 bash 中无法正常工作,并且在大多数 shell 中都令人费解。请编辑您的问题以使其相关。

答案3

我能想到的最接近的 shell 操作符是bash补丁William Park 在 2004 年至 2008 年期间维护了该版本,其中对 bash3 进行了一些或多或少有用的扩展。

其中有一个系列a参数扩展运算符这一切都始于${var|...}其中一些让人想起 的zsh参数标志(尽管语法完全不同)。

在该 shell 中,${var| |o}将被解析为${var|cmd}, (或多或少与 相同$(cmd "$var"}),但会导致invalid command错误,因为它|o不会被视为有效的命令名称(即使您使用该名称创建了命令) 。

相关内容