关于Bash脚本中conda函数内\local与${1-__missing__}语法的疑问
Bash脚本中conda函数内
\local与${1-__missing__}语法的疑问 嗨,我来帮你拆解这两个在conda函数里用到的Bash语法点,先把原函数代码贴出来方便对照:
conda () { \local cmd="${1-__missing__}" case "$cmd" in (activate | deactivate) __conda_activate "$@" ;; (install | update | upgrade | remove | uninstall) __conda_exe "$@" || \return __conda_reactivate ;; (*) __conda_exe "$@" ;; esac }
关于\local里的反斜杠
这里的\是转义符,作用很直接:强制跳过可能存在的local别名,直接调用Shell内置的local命令。
为什么要多这一步?因为极少数用户可能会自定义local的别名(比如把它映射成其他命令),加了反斜杠后,Shell会忽略这些自定义别名,确保我们用的是真正的内置local——也就是用来声明函数局部变量的命令,这样cmd就只会在conda函数内部生效,不会污染全局环境。
关于${1-__missing__}
这是Bash的参数展开默认值语法,格式是${参数名-默认值},具体规则是:
- 如果
$1(调用conda函数时传入的第一个参数)存在且不为空,就把cmd设为$1的实际值; - 如果调用
conda时没传任何参数($1不存在),就把cmd设为__missing__这个默认字符串。
后面的case语句就能通过这个默认值,处理“用户直接敲conda没加任何子命令”的情况,匹配到(*)分支去执行__conda_exe "$@"(一般会输出conda的帮助信息)。
备注:内容来源于stack exchange,提问作者Charles Ju
相关产品推荐
相关产品推荐

