Variables 带有环境内容的awk显示变量

Variables 带有环境内容的awk显示变量,variables,awk,string-substitution,Variables,Awk,String Substitution,我从system one中得到一个返回字符串的变量,如: $VARIABLE/dir/text.file 我试图使用gsub,但我遗漏了一些东西: onstat -c | grep ^MSGPATH | awk 'gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}' 它返回错误: awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2} awk: cmd. line:1:

我从system one中得到一个返回字符串的变量,如:

$VARIABLE/dir/text.file
我试图使用
gsub
,但我遗漏了一些东西:

onstat -c | grep ^MSGPATH | awk 'gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}'
它返回错误:

awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}
awk: cmd. line:1:                        ^ syntax error
awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}
awk: cmd. line:1:                                     ^ 0 is invalid as number of arguments for gsub

有什么问题吗?

因为awk正文在单引号中,所以不能展开shell变量。安全地执行此操作的方法是使用
-v
选项将值传递给awk:

... | awk -v dir="$INFORMIXDIR" 'gsub (/\$INFORMIXDIR/, dir) {print $2}'

注意,您必须在正则表达式中转义
$
,因为它是一个特殊的正则表达式字符(意思是“字符串结束”)

因为awk正文在单引号中,所以不能展开shell变量。安全地执行此操作的方法是使用
-v
选项将值传递给awk:

... | awk -v dir="$INFORMIXDIR" 'gsub (/\$INFORMIXDIR/, dir) {print $2}'

请注意,您必须转义正则表达式中的
$
,因为它是一个特殊的正则表达式字符(意思是“字符串结束”)

您是否有onstat-c生成的一些输出?但是是否要在awk中打印变量值?或者什么?它返回:$INFORMIXDIR/tmp/online.log,然后我需要使用该值,INFORMIXDIR是一个环境变量。您需要的是在AWK中打印$INFORMIXDIR/tmp/online.log的环境值,是吗?是的,我想在我的脚本中使用这个值。你有onstat-c生成的一些输出吗?但是你想在awk中打印变量值吗?或者什么?它返回:$INFORMIXDIR/tmp/online.log,我需要在后面使用该值,INFORMIXDIR是一个环境变量。您需要的是在AWK中打印$INFORMIXDIR/tmp/online.log的环境值,对吗?是的,我希望在我的脚本上使用该值可能避免正则表达式转义并使用
[$]
而不是使用正则表达式转义,而是使用
[$]