Bash 创建自定义关键字和运算符

Bash 创建自定义关键字和运算符,bash,Bash,我想使用几个其他关键字,而不是常用的运算符,例如或for| alias只对命令行执行这些操作,而我只对bash本身的核心语法感兴趣 在其他语言中,您可以通过一个简单的绑定来实现这一点,例如在F#vialet(or)=(| |)中作为别名: alias and='(($?==0)) &&' alias or='(($?==0)) ||' alias not='!' 作为职能: and () { (($?==0)) && "$@" } or () {

我想使用几个其他关键字,而不是常用的运算符,例如
for
|

alias
只对命令行执行这些操作,而我只对bash本身的核心语法感兴趣

在其他语言中,您可以通过一个简单的绑定来实现这一点,例如在F#via
let(or)=(| |)中作为别名:

alias and='(($?==0)) &&'
alias or='(($?==0)) ||'
alias not='!'
作为职能:

and () {
    (($?==0)) && "$@"
}

or () {
    (($?==0)) || "$@"
}

not () {
    ! "$@"
}
用法:

$ false; and echo hello
$ true; and echo hello
hello
$ false; or echo hello
hello
$ true; or echo hello
$ not false; echo $?
0
$ not true; echo $?
1

这些函数的用法与。

|
不是shell中的函数;这是语法中固有的。以shell为例,而不是试图将其转换为其他内容。我认为在bash中没有这样做的好方法,我也不认为这是一个好主意。我要说的是,您不能在shell中创建自己的关键字和运算符。(实际上,在许多情况下,您可以使用别名替换关键字,尽管这仍然是一个坏主意。)这是一个糟糕的想法,但是
或(){如果test$?=0;则返回0;否则返回“$@”;fi;}
。这并不理想,因为您需要执行
cmd1;或者cmd2
而不是
cmd1或cmd2
。我非常讨厌这一点,但我不会投反对票,因为这是OP要求的for@Coffee说得清楚一点,我也讨厌它,也看不出它有什么用处——我主要是想把它作为一种锻炼来尝试。