我对shell脚本中的变量替换感到困惑。这是交易:我有以下脚本。
if [ -d ~someone/Desktop ]
then
echo exist
fi
将确定用户“某人”是否在其主目录下有“桌面”目录。但是,如果我用其他变量替换某人,那就不正确了。见下文,
var=someone
if [ -d ~${var}/Desktop ]
then
echo exist
fi
虽然用户“某人”拥有桌面目录,但输出中不会打印。有人能告诉我为什么会这样吗?
答案 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