【问题标题】:Bash: If variable name is a specific pattern of chars doBash:如果变量名是特定的字符模式
【发布时间】:2019-03-14 00:22:51
【问题描述】:

在 bash 中,我想检查一个变量的名称是否包含特定的字符模式,如“abc”,如果它是真的,它应该回显该变量。最好作为 if 循环。 所以:

abc=1

opabc=1

应该回显“1” 但是:

cba=1

什么都不做。

【问题讨论】:

    标签: bash loops variables


    【解决方案1】:

    请您尝试以下纯 bash 方式。请给脚本适当的权限并运行它,例如:./script.ksh 左右。我还写了else 条件来打印像string NOT found 这样的语句,以防你不想打印任何你可以从中删除else 的部分(尽管当我们没有时这不是好的编程习惯)正确的声明,任何检查点上的打印声明总是有助于任何类型的故障排除恕我直言)。

    cat script.ksh
    var="abc=1"
    val="${var%=*}"
    val_field="${var#*=}"
    if [[ "$val" =~ "abc" ]]
    then
       echo "$val_field"
    else
       echo "String abc NOT found."
    fi
    

    或者(根据@Benjamin W. 的评论,现在在这里添加他的好建议作为替代)

    cat script.ksh
    var="abc=1"
    IFS='=' read -r val val_field <<< "$var"
    if [[ "$val" =~ "abc" ]]
    then
       echo "$val_field"
    else
       echo "String abc NOT found."
    fi
    

    【讨论】:

    • @BenjaminW.,感谢您告知先生,现在在解决方案中添加了该替代方案。
    【解决方案2】:

    我想你正在扫描某种配置文件。

    awk -F= '$1~/abc/ {print $2}' input.cfg
    

    = 符号处拆分输入。如果字段 1 包含 abc,则打印字段 2。

    $ awk -F= '$1~/abc/ {print $2}' <<< 'abc=1'
    1
    $ awk -F= '$1~/abc/ {print $2}' <<< 'opabc=1'
    1
    $ awk -F= '$1~/abc/ {print $2}' <<< 'cba=1'
    $
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多