我使用 Bash 5.1.8。运行man
显示手册页,但有以下错误
man ps
sh: bat: line 10: syntax error near unexpected token `('
sh: bat: line 10: ` *.?(ba)sh)'
sh: error importing function definition for `bat'
Run Code Online (Sandbox Code Playgroud)
我认为某些 shell ( sh
) 发现 Bashisms 令人讨厌。如果我从以下内容中删除 Bash-isms,这些错误就会消失~/.bashrc
:
function bat {
# lines snipped for brevity
case "$f" in
*.rs ) opt_syntax="--syntax=rust";;
*.?(ba)sh ) opt_syntax="--syntax=shellscript";;
*.?(m)m ) opt_syntax="--syntax=objc";;
esac
# lines snipped for brevity
}
export -f bat
Run Code Online (Sandbox Code Playgroud)
我确信.bashrc
它本身没有问题,因为在 Bash 启动时我没有看到任何错误或警告。进一步调试我注意到.profile
采购.bashrc
# …
Run Code Online (Sandbox Code Playgroud) 我正在研究使用${parameter:-word}
vs 的参数扩展${parameter:=word}
。
${parameter:-word}
如果参数未设置或为空,则替换单词的扩展。
${parameter:=word}
如果参数未设置或为空,则将单词的扩展分配给参数。然后替换参数的值。
当然,关键的区别在于每个描述的第一句,替换与分配。
但实际上,我不知道当某事是时substituted
与当某事是时会发生什么assigned
。
最后,什么时候使用其中一种比较合适?