我在我的 unix 环境中设置了以下变量。如果我尝试在 awk 命令中使用它,它不起作用,但当我不使用 $b 变量时,相同的命令正在工作
$b="新"
当我尝试执行命令时它不工作
echo "$a" | tr [a-z] [A-Z] |awk -v RS=, '/TABLE/&&/CREATE/&&/`echo ${b}`/{print $NF}'
但是,如果我将 $b 值替换为 NEW,因为 低于其工作范围
echo "$a" | tr [a-z] [A-Z] |awk -v RS=, '/TABLE/&&/CREATE/&&/NEW/{print $NF}'
你不能像那样在 awk
中使用 bash
var。相反,使用:
echo "$a" | tr [a-z] [A-Z] | awk -v RS=, -v myvar=$b '/TABLE/&&/CREATE/&& $0~myvar {print $NF}'
看一个例子:
$ var="hello"
$ awk -v text=$var 'BEGIN{print text}'
hello
此外,对我来说它适用于 tr 'a-z' 'A-Z'
而不是 tr [a-z] [A-Z]
。并基于 Mark Setchell建议,您可以使用 IGNORECASE = 1
跳过它:
echo "$a" | awk -v RS=, -v myvar=$b 'BEGIN{IGNORECASE=1} /TABLE/&&/CREATE/&& $0~myvar {print $NF}'