IPython:在shell调用中保护{}括号

IPython:在shell调用中保护{}括号,ipython,Ipython,我一直在玩IPython,它能够执行以为前缀的shell命令。我遇到了一个可以通过以下示例说明的问题: In [1]: filename="mytxtfile.txt" In [2]: !echo $filename mytxtfile.txt In [3]: !echo ${filename}.bak .txt.bak In [4]: !echo ${filename} .txt 我的印象是,将python变量的名称包装在{…}中,这样我就可以在其中添加一些东西,而不需要中间有空格。附

我一直在玩IPython,它能够执行以
为前缀的shell命令。我遇到了一个可以通过以下示例说明的问题:

In [1]: filename="mytxtfile.txt"

In [2]: !echo $filename
mytxtfile.txt

In [3]: !echo ${filename}.bak
.txt.bak

In [4]: !echo ${filename}
.txt
我的印象是,将python变量的名称包装在
{…}
中,这样我就可以在其中添加一些东西,而不需要中间有空格。附加本身可以工作,但显然
${filename}
与IPython中的
$filename
不同


为什么会这样?在shell调用期间,我如何向python变量的值追加内容?

我发现了我的错误:在
{…}
前面没有
$

In [5]: !echo {filename}.bak
mytxtfile.txt.bak

参考资料:

我认为有趣的是,
${filename}
只扩展到它的扩展名。找到原因了吗?是的,
{filename}
被扩展为
mytxtfile.txt
shell接收
$mytxtfile.txt
,并且
$mytxtfile
被shell扩展为零。例如,试试
filename=“PATH”
。@Matt-我明白了,我只是想知道为什么
${filename}
会扩展到文件的后缀。这只是一种非直观的,仅此而已…@MattDMo我解释的
${filename}
=>
$myfile.txt
但是
$myfile
=
'
所以
$myfile.txt
.txt
其中
=/code>由IPython扩展而
由shell扩展…@Matt现在我明白了。很抱歉,有点闷:)