[英]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.