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

2024-05-15 17:39:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在bashshell中从python的结果中获取一个变量。 下面是我的python代码:

print '** it is python testing **'

我做了一个空壳脚本。当我正常工作时,它显示出非常正确的结果。在

^{pr2}$

结果: ** 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版本)

有人能帮我吗? 提前感谢:)


Tags: 代码py脚本bashpytestisshit
1条回答
网友
1楼 · 发布于 2024-05-15 17:39:57

如果你不引用扩展名,它们就是字符串拆分和全局扩展。”globexpansion“意味着像*这样的东西被改成文件名列表。在

所以,引用:

echo "$PYTEST"

…将以单个字符串的形式传递确切的输出。在

不引用:

^{pr2}$

…将首先扩展:

echo ** it is python testing **

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


请注意,即使不使用globbing,字符串拆分也会产生意想不到的效果。假设您的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的shell中,未加引号的扩展也是如此。(顺便说一句,zsh在这方面是否符合POSIX,并且隐式地将扩展视为引用了它们)。在

相关问题 更多 >