veh*_*zzz 9 variables bash scripting awk escaping
我刚刚从我的shell脚本尝试了这个,结果不是预期的
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
Run Code Online (Sandbox Code Playgroud)
即使包含文本,它也没有找到$ REF
建议!
gle*_*man 44
不要在shell中引用游戏,而是使用-v选项将shell变量作为awk变量传递:
awk -v ref="$REF" 'match($0, ref) {print $2}'
Run Code Online (Sandbox Code Playgroud)
如果$REF只是文本而不是正则表达式,请使用index()函数而不是match().
Mar*_*gen 16
你的问题措辞真的很差......
无论如何,我想你想要这个:
REF=SEARCH_TEXT
echo "some text" | awk "/$REF/{print \$2}"
Run Code Online (Sandbox Code Playgroud)
请注意转义$2和双引号.
或这个:
REF=SEARCH_TEXT
echo "some text" | awk "/$REF/"'{print $2}'
Run Code Online (Sandbox Code Playgroud)
请注意明智地使用双引号和单引号并且不能转义$2.
你必须使用shell扩展,否则它将包含导出shell变量并使用awk在环境中使用它 - 这在这种情况下是过度的:
export REF=SEARCH_TEXT
echo "some text" | awk '{if (match($0, ENVIRON["REF"])) print $2}'
Run Code Online (Sandbox Code Playgroud)
我认为awk不支持/.../ guard中的变量.如果我错了,请纠正我.