我需要在bash shell脚本中声明变量,其中名称和值都是从另一个命令的输出中获取的。如何使用bash中的`declare`在命令的输出中设置其名称和值取自哪个变量?
对于这个问题的缘故,我将使用一个临时文件tmp
:
$ cat tmp
var1="hello world"
var2="1"
...,并使用它下面我模拟命令。
最后,我需要有变量$var1
和$var2
组分别与hello world
和1
,与直接从输入采取的变量名和var1
var2
。
这是我走到这一步:
$ cat tmp|while read line; do declare $line; done
我知道我并不需要使用cat
但这是模拟的输入是从其他命令的输出取,而不是事实在一个文件中。
这不起作用。我得到:
bash: declare: `world"': not a valid identifier
和
$ echo $var1; echo $var2
$
我不明白为什么这不工作,因为我可以这样做:
declare var1="hello world"
...与预期的结果。我认为这将是相当的,但我显然是错的。
我发现this answer与我的问题最接近,但并不完全,因为它依赖于文件来源。我想避免这种情况。我发现其他答案使用eval
,但我更愿意避免这种情况。
也许在我不明白的引号的使用中有微妙之处。
如果唯一的方法是使用一个临时文件和源代码,那就是我要做的,但我认为必须有另一种方式。
如果OP执行脚本(在子shell上运行) – Inian
这仍然不能解决问题好吧,它不适用于子shell。 @Inian。 – zhenguoli
@zhenguoli恐怕这并不能回答这个问题,因为1)它仍然依赖于一个外部文件,2)如果变量的值有一个“=”符号,它就不起作用。 – Jordan