2016-10-24 4 views
0

Сокращение, что я пытаюсь сделать, чтобы простой пример:Как динамически вычислять значение переменной и использовать ее в команде?

env temp=`pwd` echo "$temp" 

Я получаю сообщение:

temp: Undefined variable. 

Как заставить его работать (в раковине-агностик способом)? Я ожидаю, что будет напечатан результат pwd.

Мои фактические требования вместо сложного выражения вместо pwd, являются сценарием вместо «echo» и переменной $temp в качестве аргумента для этого скрипта.

Кроме того, я хочу установить эту переменную только для этой единственной команды, а не для всей оболочки (или любых последующих подоболочек).

+0

Зачем вам это нужно? Оболочка расширяет '$ temp' до запуска команды, поэтому содержимое среды не имеет значения. – chepner

+0

@ jonathan-leffler Я думаю, что это обман части 'bash', но не части' csh'. – davejagoda

+0

Правильный ответ на часть 'csh':« Не используйте морскую раковину, оставьте морские раковины на берегу моря (где, если повезет, прилив смывает их »). Непонятно, почему код пытается передать 'temp' как аргумент и переменную среды. Если это сложная команда вместо 'pwd' и скрипта вместо' echo', все это должно быть завершено в скрипте, а скрипт должен быть сценарием оболочки Bourne/Korn/POSIX/Bash, а не скриптом оболочки C , –

ответ

0

Как о чем-то вроде этого для sh и bash

(export temp=`pwd`; echo $temp) 

И это для csh

csh -c 'setenv temp `pwd`; echo "$temp"' 
+0

Спасибо. Как я могу сделать это в командной строке, чтобы он мог работать как в csh, так и в bash? – JLB

+0

См. Мой пересмотренный ответ. – davejagoda