代码之家  ›  专栏  ›  技术社区  ›  shadowtalker

检查是否设置了“以x值命名的参数”

zsh
  •  0
  • shadowtalker  · 技术社区  · 4 年前

    我目前正在使用这样的一段代码:

    if (( $( eval "echo \${+$foo}" ) )); then
      ./my-prog
    fi
    

    有没有更优雅或简洁的方式来表达这一点?最初我试过

    if (( ${+${(P)foo}} )); then
      ./my-prog
    fi
    

    但这引发了“糟糕的替代”错误。

    1 回复  |  直到 4 年前
        1
  •  2
  •   chepner    4 年前

    还有 -v 运算符,排除了间接参数扩展的需要:

    if [[ -v $foo ]]; then
      ./my-prog
    fi
    

    这记录在 man zshmisc ,在条件表达部分。

        2
  •  1
  •   shadowtalker    4 年前

    (P) + 如果您以正确的顺序使用它们,则可以在相同的参数扩展中使用:

    if (( ${(P)+foo} )); then
      ./my-prog
    fi