如果我在 .bashrc 中定义这样的别名:
alias cd="cd $1 && ls"
如果我打电话:
cd test
它正确显示测试目录中的文件,但没有更改当前目录。
如果我在 .bashrc 中定义一个函数:
function cd {
cd "$1" && ls
}
现在如果我打电话
cd test
它正确显示测试目录中的文件并将当前目录更改为“test”。
有人知道有什么区别吗?
答案1
事实上,在扩展后进行的第一个别名调用示例中:
cd test ---> cd $1 && ls test
这是 bash 脚本调用和别名扩展之间的基本区别!通过使用别名,您的参数将写入别名定义的所有字符之后。 The$1
按字面意思使用,不使用test
末尾的单词代替。您可以通过更改别名定义中的命令顺序来简单地验证这一点
alias cd="ls $1 && cd"
为您提供了正确的目录更改,但没有目录列表。