Sep*_*ari 1 bash alias bash-alias
我正在尝试写一个别名来做两件事
$alias cde='cd "$@" && echo'
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,当我用
$cde test
test
Run Code Online (Sandbox Code Playgroud)
所发生的只是它回声测试:
看起来我的参数没有传递给第一个语句,而是在整个别名的末尾用完。根据我的理解,$@应该消耗所有参数,以便它永远不会到达回声。有什么办法可以在第一部分而不是第二部分中使用参数?
Alias 不接受参数。它只是将命令行中的一个字符串替换为另一个字符串。没有单独$@的别名,因此"$@"不会像您在这里预期的那样扩展。它展开就像您直接在命令行中输入一样(手动):
echo "$@"
Run Code Online (Sandbox Code Playgroud)
(这并没有显示确切的分词,但这不是重点)。
然而,一个函数确实接受参数并且有它自己的$@. 我不清楚您是否希望echo打印别名“参数”。如果是这样,我会这样做而不是别名:
cde() { cd "$@" ; echo "$@" ; }
Run Code Online (Sandbox Code Playgroud)
更确切地说:
cde() { cd "$@" ; pwd ; }
Run Code Online (Sandbox Code Playgroud)
不同之处在于处理(回显)多个参数,扩展路径等..。此外-L和-P选项pwd可能有用。
如果你想覆盖,cd那么你需要command避免无限循环(否则函数会调用自己):
cd() { command cd "$@" ; pwd ; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |