繁体   English   中英

为什么来自python结果的shell脚本中的变量工作异常?

[英]Why the variable in shell script from the result of python works strange?

我正在尝试从python的结果获取bash shell中的变量。 这是我的python代码:

print '** it is python testing **'

我做了一个shell脚本。 当我正常时,它显示出非常正确的结果。

#!/bin/bash
python pytest.py

结果: ** it is python testing **

但是,当我将它作为shell中的变量时,它显示出奇怪的结果。 这是脚本:

#!/bin/bash
#python pytest.py

PYTEST="$(python pytest.py)"
echo $PYTEST

然后结果看起来像这样:

ptest.sh pytest.py it is python testing ptest.sh pytest.py

我从其他复杂的代码尝试过,但是结果几乎相同。 Shell脚本中的变量始终在目录中显示一些文件。 我不擅长shell脚本,但不明白为什么。 (我使用的是GNU bash,4.1.10版本)

有人可以帮助我吗? 提前致谢 :)

如果您不引用扩展名,则它们是字符串拆分和全局扩展的。 “全局扩展”意味着*将更改为文件名列表。

因此,引用:

echo "$PYTEST"

...将确切的输出作为单个字符串传递。

没有引用:

echo $PYTEST

...将首先扩展:

echo ** it is python testing **

...然后将**更改为文件名列表, 然后调用echo


请注意,即使不进行字符串拆分,字符串拆分也可能具有意想不到的效果。 假设您的Python程序做到了这一点:

print "      it is python testing"

您可能希望echo $PYTEST在这种情况下可以正常工作...但是相反,您会看到它删除了前导空格:

> echo $PYTEST
it is python testing

为什么? 因为字符串拆分会将输入分解为单词,并将每个单词作为单独的参数传递给echo,所以echo将其参数连接在一起,每个参数之间有一个空格。

因此,如下所示删除空格:

> echo       it is     python testing
it is python testing

...对于与POSIX兼容的外壳中未引用的扩展,也是如此。 (顺便说一句,zsh在这方面符合POSIX,并且隐含地将扩展视为已被引用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM