我需要在命令替换后扩展参数。
GNU bash,版本 4.1.5(1)
$ foo() { echo \$a; }
$ a=5
$ echo $(foo)
$a
是否可以?
测试:
#!/bin/bash
echo $a
跑步:
a=5
echo $(./test)
如果测试:
#!/bin/bash
echo \$a
跑步:
echo $(./test)
$a
不工作(
答案1
不改变源代码就无法改变顺序。
您可以使用评估:
eval echo $(foo)
男子猛击:
The order of expansions is: brace expansion, tilde expansion, parame‐
ter, variable and arithmetic expansion and command substitution (done
in a left-to-right fashion), word splitting, and pathname expansion.
答案2
... 什么?
$ foo() { echo $a; }
$ a=42
$ echo $(foo)
42
答案3
echo `eval foo`
这是你想要的吗?
答案4
功能:
$ a=5
$ foo() { echo \$a; }
$ foo
$a
$ eval echo $(foo)
5
脚本:
#!/bin/bash
echo $a
跑步:
$ a=5
$ ./test
$ export a
$ ./test
5
新脚本:
#!/bin/bash
echo 'echo $a'
跑步:
$ a=5
$ ./test
echo $a
$ eval $(./test)
5
Python 示例:
$ a=5
$ python -c 'print "echo $a"'
echo $a
$ eval $(python -c 'print "echo $a"')
另一个 Python 示例:
$ a=5
$ python -c 'print "a=42"'
a=42
$ echo $a
5
$ declare $(python -c 'print "a=42"')
$ echo $a
42