Bash-重写if函数
我正在尝试制作自己的if函数,它的编写方式与传统的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和!是关键词
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