Изменить порядок расширений (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
Не работает (
4 ответа
Порядок не может быть изменен без изменения исходного кода.
Вы можете использовать eval:
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.
Функция:
$ 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