0

我有一个包含以下行的配置文件:

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

perl在 csh 脚本中使用我可以$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 的内置命令来做到这一点,而不必依赖 using perl?顺便说一句,使用的选择csh不是我的,所以请不要回复批评。谢谢。

4

1 回答 1

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

于 2009-11-17T19:26:56.577 回答