2015-05-25 107 views
0

我想查看一個文件夾是否存在。在腳本文件中如果我使用:在shell腳本中使用存在命令的路徑變量

#!/bin/bash 

batch_folder=~/Desktop/ 
if [ -d $batch_folder ] 
then 
    echo "Dir exists." 
else 
    echo "Dir doesn't exists." 
fi 

我得到的結果是相應的回聲。但是當我用read命令提示輸入路徑時,即使確實存在,每次都會發現該目錄不存在。這是我的腳本:

#!/bin/bash 

read -e -p "Batch folder location: " batch_folder 
if [ -d $batch_folder ] 
then 
    echo "Dir exists." 
else 
    echo "Dir doesn't exists." 
fi 

我也試過在if聲明可變"$batch_folder"${batch_folder}"${batch_folder}"但這些作品的使用。

我知道問題出在如何read命令保存的變量,因爲在我的第一個例子,如果我設置batch_folder='~/Desktop/'我得到了相同的結果與read命令。

回答

3

我打算假設您正在輸入th在提示符處出現。 ~的擴展是在腳本令牌上發生的shell功能,而不是通常的參數或輸入。

您可以expand it manually

batch_folder="${batch_folder/#\~/$HOME}" 
0

首先,引用變量:

if [ -d "$batch_folder" ] 

其次,評估變量中的內容(擴展字符像~):

... 
eval batch_folder="${batch_folder}" 
if [ -d "$batch_folder" ] 
... 

的第一句話將修復爲迪爾斯問題第二個將解決包含~等dirs的問題。

+1

或者使用'[[]]'代替,則變量不需要被引用。 – cdarke

相關問題