bash 别名如何理解“$@”?

bash 别名如何理解“$@”?

我正在尝试写一个别名来做两件事

$alias cde='cd "$@" && echo'

但出于某种原因,当我用

$cde test
test

所发生的一切都是回声测试:

看起来我的参数没有传递给第一个语句,而是在整个别名的末尾被用完了。根据我的理解,应该$@消耗所有参数,这样它就永远不会到达回显。有什么办法可以让我在第一部分而不是第二部分中使用参数吗?

答案1

$@Alias 不接受参数。它只是在命令行中用一个字符串替换另一个字符串。别名没有单独的部分,因此"$@"不会像您预期的那样扩展。它会像您直接在命令行中输入一样扩展(手动):

echo "$@"

(这并没有显示出确切的单词分裂,但这不是重点)。

但是函数确实需要参数,并且有自己的$@。我不清楚您是否希望echo打印别名“参数”。如果是这样,我会这样做而不是别名:

cde() { cd "$@" ; echo "$@" ; }

更确切地说:

cde() { cd "$@" ; pwd ; }

不同之处在于处理(回显)多个参数、扩展路径等..。此外-L-P选项也pwd可能有用。

如果您想覆盖,cd那么您需要command避免无限循环(否则函数将调用自身):

cd() { command cd "$@" ; pwd ; }

相关内容