Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-重写if函数_Bash_If Statement_Rewrite - Fatal编程技术网

Bash-重写if函数

Bash-重写if函数,bash,if-statement,rewrite,Bash,If Statement,Rewrite,我正在尝试制作自己的if函数,它的编写方式与传统的if函数略有不同 这就是我目前所拥有的(可能还远未完成) 完成后,其运行方式应如下所示: check $foo != 2 //do this end 我如何做到这一点 如何合并缩进代码?那么如何合并“end”语句呢?您永远无法在bash中为if创建包装器。这是因为if是一个shell关键字 关键字是保留字、标记或运算符。关键词有一个 对外壳有特殊的意义,确实是建筑的基石 shell的语法。例如,if、for、while、do和!是关键词

我正在尝试制作自己的if函数,它的编写方式与传统的if函数略有不同

这就是我目前所拥有的(可能还远未完成)

完成后,其运行方式应如下所示:

check $foo != 2
    //do this
end
我如何做到这一点


如何合并缩进代码?那么如何合并“end”语句呢?

您永远无法在bash中为
if
创建包装器。这是因为
if
是一个shell关键字

关键字是保留字、标记或运算符。关键词有一个 对外壳有特殊的意义,确实是建筑的基石 shell的语法。例如,if、for、while、do和!是关键词。 与a类似,关键字硬编码到Bash中,但与a不同 内置,关键字本身不是命令,而是 命令构造

下面是一个演示:

$type if
if是一个shell关键字
$函数,如果{echo“something”;}
$type if
if是一个shell关键字
$#因此,“if”仍然是一个shell关键字
$#而新创建的函数“if”将永远无法工作:(
$type cd
cd是一个内置的外壳
$function cd{echo“something”;}
$type cd
cd是一个函数
cd()
{ 
呼应“某物”
}
$cd$HOME
某物

$#因此,“cd”不再是一个内置函数,而新创建的函数“cd”可以工作!:)
听起来您试图做的事情最好是替换
测试
aka
[
,而不是
if
本身。下面是您完成函数的方法:

function check
{
    if [ "$2" = "=" ]; then
        if [ "$1" = "$3" ]; then
            return 0
        else 
            return 1
        fi
    elif [ "$2" = "!=" ]; then
        if [ "$1" != "$3" ]; then
            return 0
        else
            return 1
        fi
    fi
    echo "Unknown operator: $2" >&2
    return 1
}
下面是如何使用它:

if check "foo" != "bar"
then
    echo "it works"
fi

你不能在
bash
中定义新语法。简短回答:你不能。处方:学习bash的语法,而不是试图调整它。我以前做过这件事,不是用if,而是echo、cat、exit和许多其他方法。重新定义变量的方式,我认为还有一种方法可以重新定义if。注意:我为这些新函数使用了不同的名称。。。也许我不应该调用我的if?我重命名了该函数以进行检查。此外,您没有重新定义如何定义变量;您围绕
bash
的内置
declare
命令编写了一个包装器。与
if
一样,参数赋值是一种语法特性,不能在shell语言中重写。感谢您的响应…我想做的是做一个函数,它运行起来就像if一样,但是有不同的语法…它基本上接受参数,在这些参数上运行if,然后运行其余的代码。根据你刚才给我的,这是不可能的?@Leviathan,正如我所说,
if
不是一个函数,或者命令,或者你所说的内置代码nk.是一个不能在shell语言本身中重写的语法特性。因此,您根本无法创建类似于它的其他东西否,根据他的解释,他确实在尝试替换
if
。他希望他的
//在条件为真时运行此
部分,因为bash不能像在,不可能按照他的要求去做。事实上,这正是我的想法!然而,当我运行它时,它告诉我'fi'是一个意外的标记,并且崩溃了……。@Levithan确保您包含了
then
,并且在
then
fi
之前都有一个换行符
if check "foo" != "bar"
then
    echo "it works"
fi