awk 引号与变量问题 求详解
echo'aaa'|awk'{print"mytest"}'c=''ddff'echo'aaa'|awk'{print"'"$c"'"}'//放大"'"$c"'"想问下为...
echo 'aaa' | awk '{ print "my test" }'
c=''dd ff'
echo 'aaa' | awk '{ print "'"$c"'" }' //放大 " ' " $c " ' "
想问下为什么awk打印字符串my test 需要双引号“my test”
awk引用shell变量的时候" ' " $c " ' " 需要这么多引号
现在书本/网站讲的不明不白 引号问题上面老出错 展开
c=''dd ff'
echo 'aaa' | awk '{ print "'"$c"'" }' //放大 " ' " $c " ' "
想问下为什么awk打印字符串my test 需要双引号“my test”
awk引用shell变量的时候" ' " $c " ' " 需要这么多引号
现在书本/网站讲的不明不白 引号问题上面老出错 展开
1个回答
展开全部
你的问题实际上牵扯到 awk 和 bash 中对引号的处理。
先说 "为什么awk打印字符串my test 需要双引号“my test”
awk 打印字符串,字符串必须用双引号括起来。 如果不扩,比如 awk '{print my test}', awk 会认为你是要打印变量 my 和 test 的值。 比如
echo 'aaa' | awk '{my=12; test=13; print my test}'
你会得到
1213
然后再说 echo 'aaa' | awk '{ print "'"$c"'" }' //放大 " ' " $c " ' "
这里,用 单引号将整个 awk 命令括起来,这个没什么问题。 由于你要 awk 打印的是 bash 变量 c 的内容, 如果直接 awk '{print "$c"}', 由于 $c 是在单引号中,bash不会将 $c 替换成其值,相当于让 awk 直接打印字符串 $c。
为了能够既保证 awk print 语句后面的字符串被 双引号抱起来,又让 $c 被bash替换成 c 的值,你的命令里才会出现那么多引号,并将awk命令分成了好几个部分,
第一部分, '{print "' ; 即 {print 以及要打印字符串的左边的双引号
第二部分, "$c"; 由于是双引号,所以bash会将 $c 替换成 c 的值
第三部分, '"}' ; 即 print 要打印的字符串的右边的双引号和括号
这三部分连起来就构成了了完整的 awk 命令。
但是,我认为可以有更易读的方法来解决你这个问题,比如利用 bash 的 eval
cmd="echo 'aaa' | awk '{print \"$c\"}'"
eval $cmd
或者用双引号将awk命令括起来
echo 'aaa' | awk "{print \"$c\"}"
先说 "为什么awk打印字符串my test 需要双引号“my test”
awk 打印字符串,字符串必须用双引号括起来。 如果不扩,比如 awk '{print my test}', awk 会认为你是要打印变量 my 和 test 的值。 比如
echo 'aaa' | awk '{my=12; test=13; print my test}'
你会得到
1213
然后再说 echo 'aaa' | awk '{ print "'"$c"'" }' //放大 " ' " $c " ' "
这里,用 单引号将整个 awk 命令括起来,这个没什么问题。 由于你要 awk 打印的是 bash 变量 c 的内容, 如果直接 awk '{print "$c"}', 由于 $c 是在单引号中,bash不会将 $c 替换成其值,相当于让 awk 直接打印字符串 $c。
为了能够既保证 awk print 语句后面的字符串被 双引号抱起来,又让 $c 被bash替换成 c 的值,你的命令里才会出现那么多引号,并将awk命令分成了好几个部分,
第一部分, '{print "' ; 即 {print 以及要打印字符串的左边的双引号
第二部分, "$c"; 由于是双引号,所以bash会将 $c 替换成 c 的值
第三部分, '"}' ; 即 print 要打印的字符串的右边的双引号和括号
这三部分连起来就构成了了完整的 awk 命令。
但是,我认为可以有更易读的方法来解决你这个问题,比如利用 bash 的 eval
cmd="echo 'aaa' | awk '{print \"$c\"}'"
eval $cmd
或者用双引号将awk命令括起来
echo 'aaa' | awk "{print \"$c\"}"
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询