我从系统中获取一个返回字符串的变量,例如:
$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
可能是什么问题?
答案 0 :(得分:2)
因为awk正文是单引号,所以无法展开shell变量。安全地执行此操作的方法是使用-v
选项将值传递给awk:
... | awk -v dir="$INFORMIXDIR" 'gsub (/\$INFORMIXDIR/, dir) {print $2}'
请注意,您必须转义正则表达式中的$
,因为它是一个特殊的正则表达式字符(意为“字符串结尾”)