在csh中从文件评估环境变量

时间:2009-11-17 19:14:31

标签: 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现已设置为:SOUTHxyz3

有没有办法使用shell的内置命令来执行此操作,而不必依赖于使用perl?顺便说一句,使用csh的选择不是我的,所以请不要批评这个。感谢。

1 个答案:

答案 0 :(得分:2)

你可以使用eval,它在当前shell的上下文中解析并执行它的参数 - 这样的事情可能有用:

eval set pre_args = $pre_args

编辑:重点好点。引号 - 考虑它我很惊讶它根本评估变量。结合eval和额外的sed(以逃避引号)似乎在这里工作,但它很难看:

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