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

塞佩·纳扎里(Sepehr Nazari)

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

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

但是由于某种原因我打电话给

$cde test
test

发生的一切只是回声测试:

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

卡米尔·马乔洛夫斯基(Kamil Maciorowski)

别名不接受任何论点。它只是在命令行中将一个字符串替换为另一个字符串。$@别名没有单独的名称,因此"$@"不会按您期望的那样扩展。它会像您直接在命令行中键入(手动)一样展开:

echo "$@"

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

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

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

更确切地说:

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

区别在于处理(回显)多个参数,扩展路径..等,而且-L-P选项pwd可能很有用。

如果要覆盖,cd则需要command避免无限循环(否则该函数将自行调用):

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章