以下shell腳本將當前目錄更改爲桌面。在shell腳本中,如何用變量安全地更改當前目錄?
v=~/Desktop/
cd $v
pwd # desktop
以下腳本將當前目錄更改爲主目錄而不是生成錯誤。
cd $undefined_variable
pwd # home directory
echo $? # 0
恐怕腳本會刪除重要文件,如果我拼錯變量爲新的當前目錄。
一般來說,你如何在shell腳本中安全地改變當前目錄中的變量?
以下shell腳本將當前目錄更改爲桌面。在shell腳本中,如何用變量安全地更改當前目錄?
v=~/Desktop/
cd $v
pwd # desktop
以下腳本將當前目錄更改爲主目錄而不是生成錯誤。
cd $undefined_variable
pwd # home directory
echo $? # 0
恐怕腳本會刪除重要文件,如果我拼錯變量爲新的當前目錄。
一般來說,你如何在shell腳本中安全地改變當前目錄中的變量?
可以set -u
在每次擴大未定義的變量時使bash
退出一個錯誤。
您可以使用test -d
條件(檢查指定的變量是否是一個目錄),即
if [[ -d $undefined_variable ]]
then
cd $undefined_variable
echo "This will not be printed if $undefined_variable is not defined"
fi
又見here進一步測試選項...
是的,那是殼
如果你輸入cd
沒有參數,它會跳轉到主目錄。 您可以在命令cd
之前檢查空或空變量。
檢查像(CD只能被稱爲如果TARGETDIR不爲空):
test -z "$targetDir" || cd $targetDir
檢查像(CD只有在TARGETDIR真的存在所謂的):
test -d "$targetDir" && cd $targetDir
注:謝謝對於-1,也應該讀最後一句。所以我增加了真正的答案。
伯恩殼有一個結構來代替未定義變量的值,${varname-subtitution}
。您可以使用此有萬一變量未定義安全後備目錄:
cd "${undefined-/tmp/backupdir}"
如果有一個名爲undefined
變量,它的值將被替換,否則/tmp/backupdir
被取代。
請注意,我也把雙引號中的變量擴展。這是用來防止字含有空格的字符串分割(適用於Windows目錄很常見)。這種方式甚至可以用於具有空格的目錄。
有關所有shell替換結構(POSIX shell有7個以上)的詳細信息,請參閱您的shell手冊的參數替換部分。
感謝您提供有用的信息!我不知道有像參數替代這樣很酷的功能。我應該多學習shell腳本。 –
用途:
cd ${variable:?}
如果$變量未定義或爲空,則bash將拋出一個錯誤,然後退出。它就像set -u
選項,但不是全局文件。
你也可以提供一個錯誤信息:'$ {variable:?變量未設置或爲空}' –
你必須寫包裝(這項工作在bash):
cd() {
if [ $# -ne 1 ] ;then
echo "cd need exactly 1 argument" >&2
return 2
fi
builtin cd "$1"
}
其他的答案也是偉大的,但'設置-u'是最簡單的解決方案。謝謝! –