我有一个包含以下行的配置文件:
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
的选择不是我的,所以请不要批评这个。感谢。
答案 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