2012-11-12 251 views
0

我對shell腳本中的變量替換感到困惑。這是交易:我有以下腳本。shell腳本變量替換

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

這將確定用戶「某人」在他的主目錄下是否具有「桌面」目錄。但是,如果我用其他變量替換某個人,這將是不正確的。見下面,

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

儘管用戶「某人」有桌面目錄,它將不會在輸出中存在打印。有人能告訴我爲什麼發生這種情況嗎

回答

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

~user是由shell解釋的特殊表達式(有關說明,請參閱man bash - > Tilde擴展)。在你的情況下,代字號後面沒有用戶名,所以正常的變量擴展發生,~$var擴展爲文字~someone,而不是通常的/home/of/someone

獲得用戶的主目錄的最快方法是從/etc/passwd grep顯示它:

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