bash 脚本是否通过引用设置变量?

does bash script set variables by reference?

我正在尝试设置一些新的别名,但遇到了一个奇怪的别名。

alias l="ls"
alias ls="ls -alGh"

我想将默认文件列表缩短为 L 并将 all info 设置为默认值 LS,但我只曾经得到的是:

~ Desktop $ unalias ls
~ Desktop $ unalias l
~ Desktop $ source ~/.bash_aliases
~ Desktop $ l
total 8
drwxr-xr-x   3 astagl  staff   .
drwxr-xr-x  34 astagl  staff   ..
-rw-r--r--   1 astagl  staff   2015-06-07_10.50.54.inline editor.html
~ Desktop $ ls
total 8
drwxr-xr-x   3 astagl  staff   .
drwxr-xr-x  34 astagl  staff   ..
-rw-r--r--   1 astagl  staff   2015-06-07_10.50.54.inline editor.html
~ Desktop $

上面的目录列表:我首先清除别名,只是为了重新开始并获取我的别名脚本,其中包括第一个列出的代码块。这里有某种奇怪的变量 referencing 吗?


解决方案

使用反斜杠似乎可以解决问题:

alias l="\ls -a"
alias ls="\ls -al"

扩展别名时,可能会递归调用其他别名。为避免这种情况,您需要使用反斜杠转义别名中的命令:

alias l="\ls"
alias ls="\ls -alGh"