bash中的命令串联

佩佩罗

我想用一些输入检查来调用一个函数(输入应该是1到21之间的整数)。如果可以,则执行回显“调用”,否则仅打印有关无效输入的消息。

我尝试使用以下简化示例,它适用于无效情况,但不适用于有效情况。怎么了?

function _check_num ()
{
    [[ "$1" =~ ^[0-9]+$ ]] && [ "$1" -ge 1 -a "$1" -le 21 ] || echo "input should be (1-21)" && return 1 // one-liner
}

function _call()
{
    _check_num $1 && echo "invoke only if input is 1-21" // does not invoke given valid input
}

注意:请向我解释此单例案例的根本原因

切普纳

不要使用&&||代替if语句的&&并且||具有相等的优先级,所以a && b || c运行c如果任一 ab失败; 它不等于if a; then b; else c; fi

a && b || c && d被解析为((a && b) ||c) && d,不是(a && b) || (c && d)

使用expicitif语句使您的代码可读。(也不要-a在内部使用[...];它被认为是模棱两可和过时的。)

function _check_num ()
{
    if [[ "$1" =~ ^[0-9]+$ ]] && [ "$1" -ge 1 ] && [ "$1" -le 21 ]; then
        return 0
    else
        echo "input should be (1-21)" >&2
        return 1
    fi
}

可读性较低的版本将类似于以下内容,使用花括号将命令正确分组。

function _check_num ()
{
  {
    [[ "$1" =~ ^[0-9]+$ ]] && [ "$1" -ge 1 ] && [ "$1" -le 21 ]
  } || {
    echo "input should be (1-21)" >&2 && return 1
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何停止在BASH脚本中串联命令替换的多行输出?

来自分类Dev

在命令分配中串联exe模式命令

来自分类Dev

Bash,导出,“-n”(用于简单的命令串联)删除“ -n”

来自分类Dev

在bash中串联文本文件

来自分类Dev

>(bash中的(tee -a ...)命令

来自分类Dev

直到Bash中的命令

来自分类Dev

gtk中的bash命令

来自分类Dev

Makefile中的Bash命令

来自分类Dev

命令中的Bash变量

来自分类Dev

bash中的子命令

来自分类Dev

如何在Jenkins的“执行Windows批处理命令”中串联添加多个命令

来自分类Dev

通过串联生成的命令的行为与Python中的硬编码命令不同

来自分类Dev

如何在Jenkins的“执行Windows批处理命令”中串联添加多个命令

来自分类Dev

Bash变量在命令中扩展

来自分类Dev

curl命令中的bash变量

来自分类Dev

命令中的Bash替代变量

来自分类Dev

Bash中嵌套命令的Heredoc

来自分类Dev

在BASH中运行变量命令

来自分类Dev

命令替换中的Bash引用

来自分类Dev

Perl脚本中的Bash命令

来自分类Dev

连接Bash中命令的结果

来自分类Dev

Bash中的多个sed命令

来自分类Dev

bash程序中的AWK命令

来自分类Dev

curl命令中的bash变量

来自分类Dev

Perl脚本中的Bash命令

来自分类Dev

多行bash命令中的注释

来自分类Dev

bash中的超时“时间”命令

来自分类Dev

bash脚本中的增量命令

来自分类Dev

bash中命令的默认参数