【问题标题】:Meaning of ${PYTHON:-python} in shell script and how to changeshell 脚本中 ${PYTHON:-python} 的含义以及如何更改
【发布时间】:2016-05-18 09:39:08
【问题描述】:

我正在尝试使用 hg-fast-export 和适用于 Windows 的 Github Bash 将 Mercurial 存储库导出到 GitHub。它在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' 才能使用该值。”我希望它像 PATH 一样,您可以在其中独立设置它以供以下行使用。

【问题讨论】:

  • Usage of :- in bash的可能重复
  • @arco444,就目前而言确实如此,但我不确定它是否针对不熟悉环境变量用法的人解决了“如何更改”。
  • 旁白:我会在/usr/local/bin 或PATH 中的另一个位置创建一个符号链接,名为python2;一旦你测试它可以工作,你就可以运行PYTHON=python2 hg-fast-export ...,而不必担心Windows路径、msys路径、cygwin路径等之间的差异。

标签: python bash shell


【解决方案1】:

这是一种评估和修改文本的方法(参数扩展)。考虑这个例子:

$ PYTHON="/usr/bin/python --version"
$ ${PYTHON:-python}
Python 2.7.10

PYTHON原本是评估版本的路径和命令。

${PYTHON:-python} 评估并运行前者,但它不是空的,因此不需要冒号破折号

详情请见What does the colon dash ":-" mean in bash

【讨论】:

    【解决方案2】:

    该语法计算一个变量,但提供了一个默认值:

    $ foo=123
    $ echo ${foo:-456}
    123
    $ echo ${bar:-456}
    456
    

    您可以尝试将修改后的$PYTHON 传递给脚本:

    $ PYTHON=c:/Python27/python hg-fast-export.sh ...
    

    【讨论】:

    • 最后一个 sn-p 在您的原始答案中吗?我一开始没看到(因此是我自己的),不知道您是在编辑窗口内回答以使其自动折叠,还是我只是误读了。
    • 我想你在我还在编辑我的时候添加了你的。 :) 我最初想回答与访问变量有关的部分问题,然后我意识到 OP 可能会尝试一种解决方法。没错,这是一个编辑,我没有意识到有一个窗口在此期间它不被视为一个。
    • nod -- 除非有人参与(也可能是赞成票/反对票,我必须找到文档),在几分钟内编辑之前的帖子或编辑提交(两个?三个?五个?)被折叠起来。
    【解决方案3】:

    这里的意图是允许通过环境传入覆盖。

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

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

    然后在hg-fast-export 中将${PYTHON:-python} 评估为python26

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 2017-12-13
      • 2011-04-16
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多