相关疑难解决方法(0)

Bash在变量中扩展变量

我正在尝试设置我的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

bash

52
推荐指数
2
解决办法
6万
查看次数

如何在文本文件中扩展shell变量?

考虑一个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编译的.

unix bash shell ksh solaris

15
推荐指数
5
解决办法
2万
查看次数

从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脚本,然后访问变量?

python bash shell environment-variables

6
推荐指数
1
解决办法
6510
查看次数

标签 统计

bash ×3

shell ×2

environment-variables ×1

ksh ×1

python ×1

solaris ×1

unix ×1