shell脚本变量替换

时间:2012-11-12 00:31:56

标签: shell variables substitution

我对shell脚本中的变量替换感到困惑。这是交易:我有以下脚本。

if [ -d ~someone/Desktop ]
then
    echo exist
fi

将确定用户“某人”是否在其主目录下有“桌面”目录。但是,如果我用其他变量替换某人,那就不正确了。见下文,

var=someone
if [ -d ~${var}/Desktop ]
then
    echo exist
fi

虽然用户“某人”拥有桌面目录,但输出中不会打印。有人能告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

var=someone
if [ -d $(eval echo ~${var})/Desktop ]
then
    echo exist
fi

答案 1 :(得分:0)

~user是一个由shell解释的特殊表达式(有关解释,请参阅man bash - > Tilde Expansion)。在您的情况下,代字号后面没有用户名,因此会进行正常的变量扩展,~$var扩展为文字~someone,而不是通常的/home/of/someone

获取用户主目录的最快方法是从/etc/passwd grep它:

grep "^$var:" /etc/passwd | cut -d: -f6