ipython 变量扩展如何工作?

Sal*_*apa 2 ipython variable-expansion

我不明白${}第四个和第六个提示符在做什么,我找不到任何关于此的文档,这本书Python for Unix and Linux System Administrator有一个类似于第六个提示符中的示例,其中变量不仅是前缀,而且$是也包含在{}以便将字符串嵌入另一个字符串中,如果我引用完整的表达式,它就会起作用,但是 [4 & 6] 中发生了什么?:

In [1]: test = 'TEST TEST TEST!!!'                                                                                          

In [2]: !echo test
test                                                                                                                         

In [3]: !echo $test                                                                                                         
TEST TEST TEST!!!                                                                                                            

In [4]: !echo ${test}   # Don't understand this one.                                                                                                
TEST TEST!!!  

In [5]: !echo {test}                                                                                                       
TEST TEST TEST!!!

In [6]: !echo ${test}TEST!!!   # Nor this one either.
TEST TEST!!!TEST!!!

In [7]: !echo '${test}TEST!!!'
$TEST TEST TEST!!!TEST!!!
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 5

在[4]中,拼写错误,)而不是},否则我会猜测当 dooing 时${test}{test}被消耗到TEST TEST TEST,导致$TEST TEST TEST,然后$TEST再次被消耗(我想是在 shell 中)。

我这么说是因为:

In [1]: test = 'PATH TEST TEST!!!'

In [2]: !echo "${test}"
/usr/local/bin:/usr/local/share/pyt.../.rvm/bin TEST TEST!!!
Run Code Online (Sandbox Code Playgroud)

但你必须小心,IPython 会进行自己的变量扩展,$foo或者{foo}(无美元符号)扩展为foo 的Python值。而Shell经常使用$FOOor ${FOO}(美元AND括号)。

在IPython中,使用时!必须使用双美元$$来表示明确的美元。但不知道如何逃脱括号。