我正在尝试设置我的PS1提示变量以动态选择颜色.为此,我使用颜色名称定义了一堆局部变量:
$ echo $Green
\033[0;32m
Run Code Online (Sandbox Code Playgroud)
但我希望在动态分配变量时使用它们,但我无法弄清楚如何正确扩展它们:
> colorstr="\${$color}"
> echo $colorstr
${Green}
Run Code Online (Sandbox Code Playgroud)
我试过一打组合eval,echo双引号,并且,没有似乎工作.我认为扩展变量的逻辑方式会导致错误:
> colorstr="${$color}"
-bash: ${$color}: bad substitution
Run Code Online (Sandbox Code Playgroud)
(为清楚起见,我使用的是>代替$提示字符,但我使用的是bash)
我该如何扩展该变量?即,以某种方式得到"绿色"这个词的价值\033[0;32m?并且优选地,还有bash或终端解析\033[0;32m为绿色.
编辑:我是误用${!x}和eval echo $x以前的,所以我接受了这些作为解决方案.对于(也许是病态的)好奇,函数和PS1变量都在这个要点:https://gist.github.com/4383597
考虑一个ASCII文本文件(假设它包含非shell脚本语言的代码):
Text_File.msh:
spool on to '$LOG_FILE_PATH/logfile.log';
login 'username' 'password';
....
Run Code Online (Sandbox Code Playgroud)
现在,如果这是一个shell脚本,我可以运行它,$ sh Text_File.mshshell将自动扩展变量.我想要做的是让shell扩展这些变量,然后创建一个新文件Text_File_expanded.msh,如下所示:
Text_File_expanded.msh:
spool on to '/expanded/path/of/the/log/file/../logfile.log';
login 'username' 'password';
....
Run Code Online (Sandbox Code Playgroud)
考虑:
$ a=123
$ echo "$a"
123
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这应该可以解决问题:
$ echo "`cat Text_File.msh`" > Text_File_expanded.msh
Run Code Online (Sandbox Code Playgroud)
...但它不能按预期工作,输出文件虽然与源相同.
所以我不确定如何实现这一点.我的目标是让我更容易维护嵌入在我的非shell脚本中的目录路径.这些脚本不能包含任何UNIX代码,因为它不是由UNIX shell编译的.
我有一个文件,其中包含一些我想在python脚本中使用的环境变量
以下工作形成命令行
$ source myFile.sh
$ python ./myScript.py
Run Code Online (Sandbox Code Playgroud)
从python脚本里面我可以访问变量之类的
import os
os.getenv('myvariable')
Run Code Online (Sandbox Code Playgroud)
我如何从python脚本中获取shell脚本,然后访问变量?