为什么在使用命令 sudo su -c "sed -n -e '$p' a.txt" 时无法获得任何输出

Why could not get any output when use command sudo su -c "sed -n -e '$p' a.txt"

在Centos 6.7中Linux,我运行可以得到一行输出:

sed -n -e '$p' a.txt

但是如果我使用这个命令,它没有输出:

sudo su -c "sed -n -e '$p' a.txt"

在第一个命令中:sed -n -e '$p' a.txt'$p',变量替换用单引号'$p'引用,则包含它的字面意思,即字面意思$p,不展开。

在第二个命令中:sudo su -c "sed -n -e '$p' a.txt"$p 包含在双引号中,虽然它包含在单引号 '' 中,但单引号只是双引号中的字符。它对$p的变量替换没有影响。所以变量替换会展开。

例如:

p="hello"
echo '$p'    # print $p
echo "'$p'"  # print 'hello'