Answers:
反斜杠将抑制别名扩展,即,它执行原始命令并确保别名版本不运行。当系统已设置shopt -s expand_aliases
(仅BASH)或使用来执行脚本时,脚本会在不知不觉中以别名扩展方式运行source
。
./conda.sh # usually no alias expansion (unless `shopt -s expand_aliases` in BASH)
source ./conda.sh # alias expansion
. ./conda.sh # alias expansion
一些系统管理员喜欢在所有内容中都加反斜杠,以防止别名的副作用,以防万一它在其他地方被无意地使用了别名并且别名得到了扩展(如前所述)。例如,如果系统在alias dirname='dirname -z'
某个地方设置了此名称,并且条件允许扩展别名,那么不幸的是,尝试调用dirname的脚本将dirname -z
改为调用,这不是该脚本的目的。
如果可以确定这样的别名不存在,我们可以删除所有的反斜杠,并且应该可以正常工作。
或者,可以使用command
而不是反斜杠版本来抑制别名。因此,\dirname
可以使用代替command dirname
,它看起来更易读。(对于诸如的内置命令cd
,应builtin
改为使用)。我更喜欢它,因为它也绕过了具有相同名称以及任何别名的函数。
unalias -a
,它会删除所有别名。
\unalias -a
抑制别名扩展
/usr/bin/dirname
吗?
/bin/ed
Ubuntu与/usr/bin/ed
CentOS。放置完整路径会降低脚本的可移植性。
DIRNAME=$(which dirname)
,因为which
看不到别名?
如果conda.sh
是要获取的文件,则反斜杠用于绕过别名。Bash通常为脚本执行禁用别名扩展,但是对于可能在交互式Shell中运行的源文件,则不是这种情况。因此,dirname
可能只运行一个名为的别名dirname
,但\dirname
会跳过别名扩展,而运行一个名为的函数或命令dirname
。(不过,不只是反斜杠,任何引用都可以。)
command dirname
。
\command dirname
,以防万一有人也为其别名command
。):|