改变扩展的顺序(bash)

改变扩展的顺序(bash)

我需要在命令替换后扩展参数。

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

相关内容