0

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

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

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

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

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

4

2 回答 2

1
var=someone
if [ -d $(eval echo ~${var})/Desktop ]
then
    echo exist
fi
于 2012-11-12T01:06:41.113 回答
0

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

获取用户主目录的最快方法是从以下位置对其进行 grep /etc/passwd

grep "^$var:" /etc/passwd | cut -d: -f6
于 2012-11-12T00:57:50.757 回答