Skip to main content
 首页 » 编程设计

python之${PYTHON :-python} in shell script and how to change 的含义

2025年05月04日11jirigala

我正在尝试使用 hg-fast-export 将 Mercurial 存储库导出到 GitHub和适用于 Windows 的 Github Bash。它在 from mercurial import node 行阻塞,因为 mercurial 不支持 Python 3。

我安装了 Python 2.7 并尝试了 shebang 行 (#!/Python27/python) 以及 alias python='c:/Python27/python'。这使 python --version 报告 2.7,但是 hg-fast-export.sh仍然调用 Python 3,因为它包含行

PYTHON=${PYTHON:-python} 

计算结果为 Python 3.4.3。

您能否解释一下如何更改它以使用不同的 Python 版本以及这里的语法是怎么回事?我真的无法谷歌 shell 中 ${} 或 :- 的含义。关于我的方法使它在 Windows 上运行的可能性的评论也可能会有所帮助。

编辑:感谢您对 :- 的解释。由于不需要参数扩展,我想我的问题的答案是“你必须在脚本的同一行中设置 PYTHON='c:/Python27/python' 才能使用它值(value)。”我希望它像 PATH 一样,您可以在其中独立设置它以供后续行使用。

请您参考如下方法:

此处的目的是允许通过环境传递覆盖。

因此,如果您在 POSIX shell 上运行:

$ PYTHON=python26 hg-fast-export ... 

然后在 hg-fast-export 中将 ${PYTHON:-python} 计算为 python26。