2009-11-17 37 views
0

評估環境變量我有一個包含以下行的配置文件:從文件中CSH

pre_args='$REGION','xyz',3 

從CSH腳本中使用perl我可以評估環境變量$REGION像這樣:

set pre_args = `grep -v '^#' $config_file | grep pre_args | cut -f 2 -d = | sed 's/ //g'` 
if ("$pre_args" != "") then 
    set pre_args = `echo $pre_args | perl -ne 'use Env; s/(\$\w+)/$1/eeg; print'` 
endif 

如果$REGION = SOUTH$pre_args現在設置爲:SOUTH,xyz,3

有沒有辦法使用shell的內置命令執行此操作,而不必依賴於使用perl?順便說一句,使用csh的選擇不是我的,所以請不要批評這個。謝謝。

回答

2

你可以使用eval,它解析並在當前shell的上下文中執行它的參數 - 這樣的事情可能工作:

eval set pre_args = $pre_args 

編輯:好點重。引號 - 思考它我很驚訝它評估變量。使用sed(逃避引號)的額外結合EVAL似乎在這裏工作,但它的醜陋:

set pre_args = grep -v '^#' config | grep pre_args | cut -f 2 -d = | sed 's/ //g' | sed "s/'/\\'/g" 
set REGION = SOUTH 
eval set pre_args = $pre_args 
echo $pre_args 

給我'SOUTH','xyz',3

+0

如果我這樣做,兩次我中途有,但是,我鬆單引號:南,xyz,3 – richard 2009-11-17 20:02:01

+0

任何作品:-)感謝您的幫助 – richard 2009-11-17 21:18:50