sh echo awk脚本输出

echo "`who am i | awk {print$1}`'s \$HOME is \"$HOME\""
echo "`who am i | awk {print\$1}`'s \$HOME is \"$HOME\""
echo "`who am i | awk '{print$1}'`'s \$HOME is \"$HOME\""
echo "`who am i | awk '{print\$1}'`'s \$HOME is \"$HOME\""
echo "`who am i | awk "{print$1}"`'s \$HOME is \"$HOME\""
echo "`who am i | awk "{print\$1}"`'s \$HOME is \"$HOME\""
root     pts/0        2021-05-04 21:43 (xxx.xxx.xxx.xxx)'s $HOME is "/root"
root     pts/0        2021-05-04 21:43 (xxx.xxx.xxx.xxx)'s $HOME is "/root"
root's $HOME is "/root"
root's $HOME is "/root"
root     pts/0        2021-05-04 21:43 (xxx.xxx.xxx.xxx)'s $HOME is "/root"
root     pts/0        2021-05-04 21:43 (xxx.xxx.xxx.xxx)'s $HOME is "/root"

上述是sh命令和结果。

为什么第3、4个没有打印详情?

shell里单引号里面的内容不展开,所以第3和4行命令awk的确接受到了 print $1, 从而把who am i的输出root pts/0 2021-05-04 21:43 (xxx.xxx.xxx.xxx)的第一个单词root作为$1打印出来了。

 

而1,2,5,6行里$1传给awk命令之前已经被展开为root pts/0 2021-05-04 21:43 (xxx.xxx.xxx.xxx)传给awk,所以这个串原样打印出来了。