我有一个别名为_test
的脚本。它工作正常,但在打印输出之前,它会执行<arguments>: command not found
。例如,_test -h
给出line 49: -h: command not found
这是一个最小的例子:
alias _test='
echo Hi
'
shopt -s expand_aliases
_test -h
编辑:对于那些询问使用函数的人,事实上,我曾经使用过一个函数——但它开始导致递归问题。我只是想要一个类似于宏的东西——就像文本被插入到脚本中一样。
编辑2:我刚刚意识到为什么我的函数/别名一直有递归。我修复了它,然后切换回一个函数,但这个问题可能会帮助其他人。
删除换行符。正如所写的,_test -h
扩展到这个,在回波的上方和下方都有一行空白:
echo Hi
-h
将其设为单行别名:
alias _test='echo Hi'
不过,一般情况下应避免使用别名。它们实际上是为了在交互式shell中提供方便。在脚本中,甚至在交互式shell中,最好使用函数。例如:
_test() {
echo Hi "$@"
}
对于那些询问使用函数的人,事实上,我曾经使用过一个函数,但它开始导致递归问题。我只是想要一个类似于宏的东西——就像文本被插入到脚本中一样。
您是否试图包装现有命令,如下图所示?
alias ls='ls --color=auto -F'
如果是这样,您可以使用command
来防止函数递归地调用自己。等效功能为:
ls() {
command ls --color=auto -F "$@"
}
command ls
调用ls
命令,而不是我们刚刚定义的ls
函数,这样我们就不会陷入无限递归循环。
感谢Kugelman的回答,我能够用解决它
alias _test='
echo Hi
true'
shopt -s expand_aliases
_test -h