Экспорт переменной среды

Можно всегда отправлять билет поддержке cPanel справки.

1
18.11.2018, 16:45
4 ответа

Если Вы хотите то, что Вы сказали, что хотели:

export STY="for i in {0..3}; do echo \$i; done"

Если Вы хотите то, что Вы, вероятно, на самом деле имели в виду:

function STY() {
    for i in {0..3}; do echo $i; done
}
export -f STY
2
27.01.2020, 23:17
  • 1
    Он мог просто использовать одинарные кавычки, т.е. экспортировать СВИНАРНИК ='for i в {0.. 3}; действительно повторите $i; сделанный' –   25.02.2012, 03:44
  • 2
    @Perry Шесть один путей, полдюжины другой. –   25.02.2012, 03:45
  • 3
    это возможный, что мы можем выполнить код, содержавшийся в переменной среды на командной строке? –   25.02.2012, 03:57
  • 4
    Между прочим, если я действительно экспортирую, такие как экспорт pqr = "время ls" и если я указываю эту переменную в некотором сценарии затем, код выполняется, но если я помещаю для цикла в этой переменной среды, затем окружают вопли во мне и говорят для команды, не найденной. –   25.02.2012, 04:31
  • 5
    @Shazard, этот ответ подразумевает, что Вы используете SST в качестве функции. ДАННЫЕ ='STY ()' (примечание оставило кавычки - они получают стандартный вывод выражения). Для выполнения нефункциональной переменной (ближе к примеру), $STY –  Basilevs 25.02.2012, 04:58

Короткий: используйте оценку "$hello".

(Этот ответ первоначально сказан: используйте $hello оценки, но другой плакат указал, что оценка "$hello" более безопасна.)

Как показано ниже:

bash-2.05a$ export hello='for i in 0 1 2 3; do echo $i; done'

Просто высказывание $hello в начале строки не работает - потому что для циклов обрабатываются перед расширением $variable (фаза ориентировала языки, я ненавижу их):

bash-2.05a$ $hello
bash: for: command not found

Но работы eval'ing:

bash-2.05a$ eval $hello
0
1
2
3
bash-2.05a$ 

Чем Вы были (или, возможно, был), выполнение неправильно:

bash-2.05a$ export hello='for i in {0..4}; do echo $i; done'
bash-2.05a$ $hello
bash: for: command not found
bash-2.05a$ eval $hello
{0..4}
bash-2.05a$ for i in {0..4}; do echo $i; done
{0..4}
bash-2.05a$ 

Т.е. по крайней мере в версии удара я использую, {0.. 4} не делает то, что Вы думали, что это должно.

В http://www.cyberciti.biz/faq/bash-for-loop/ говорится что {0.. 4} функция прибыла в удар 3.0 +.

Возможно, Вы, как я (в woprk, не домой), действительно ли использование являетесь устаревшей версией удара?

2
27.01.2020, 23:17
  • 1
    оценки использования не используют eval $hello, использовать eval "$hello". Без двойных кавычек сделан некоторый нежелательный парсинг, который может вызвать очень странные ошибки. См. этот ответ для примера (в довольно другой ситуации, но те же принципы применяются). –  Gordon Davisson 25.02.2012, 11:20

Причина, почему $hello не работает, как Вы ожидали:

  • Расширение выполняется на командной строке после того, как это было разделено на маркеры.
  • for...do...done a Compound Command который определяется на этапе tokenlize.
  • for не команда.

Так, Вы не можете сделать этого:

$ "for" i in {0..4}; do echo $i; done
sh.exe": syntax error near unexpected token `do'

Когда удар разделил командную строку на маркеры, Это видит "for" нет for, так маркер do неожиданно.


В Вашем случае:

$ hello='for i in {0..4}; do echo $i; done'
$ $hello
sh.exe": for: command not found

Bash находит один маркер $hello, затем variable-expansion&&word-spliting произойдите в порядке.
На самом деле удар анализирует результат как a Simple Command:

  • команда (for) берет отдых в качестве args (i,in,{0..4}, ;, do, ...)
  • for, do, ;, done, и т.д. потерянный их особые значения.

читайте больше для детали

1
27.01.2020, 23:17

Проблема имеет две стороны:

  • хранение сложных выражений в переменной
  • выполнение сохраненного выражения

Для хранения выражения escape-последовательности и специальное заключение в кавычки могли бы быть необходимы (который, кажется, является правильным в примере). Выполнение может быть выполнено двумя способами:

  • вызов функции как в ответе Borealid: данные ='STY ()' - стандартный вывод функции хранятся в переменную
  • вычисление выражения: данные =eval $STY для определения переменной, данного в Вашем примере
0
27.01.2020, 23:17

Теги

Похожие вопросы