gpt4 book ai didi

linux - 如果定义了变量 1,则变量 2 必须为空,在 bash 中反之亦然

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:24 24 4
gpt4 key购买 nike

我对 getopts 结构有点问题。我通过 getopts 定义了多个变量,并且有一些条件我必须在继续脚本之前检查。

用户不应该同时定义两个特殊选项(-t 用于 $target-tg 用于 $目标组)。所以我正在寻找的是一个检查的结构:

  • 如果定义了$target,则$targetgroup必须为空,并且
  • 如果 $targetgroup 被定义 $target 必须为空。

我已经使用 [[ -z $target ]][[ -n $targetgroup ]] 并检查了退出代码,但我认为这种方法是完全错误的。

有什么简单的方法可以做到这一点吗?

最佳答案

为了测试像这样的 1-of-n 条件,我们可以使用带有 :+ 修饰符的参数扩展。 ${target:+1} 仅在 $target 非空时扩展为 1。因此,您可以测试 "${target:+1}${targetgroup:+1}" 不包含多个 1:

if [[ ${target:+1}${targetgroup:+1} == 11* ]]
then
echo 'Error: it is invalid to specify both -t and -tg' >&2
exit 1
fi

对于这种特殊情况(只有两个互斥变量),我们不需要模式中的 *。有了它,您可以轻松添加更多不能与这两者中的任何一个一起使用的选项,而无需更改任何其他内容。

您也可以在允许最多 n 一组参数的情况下使用它;为此,您需要在匹配字符串中写入 n+1 个 1

如果您希望恰好提供两个选项之一,则将测试更改为!= 1

关于linux - 如果定义了变量 1,则变量 2 必须为空,在 bash 中反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com