[英]Shell Script to Enter a Directory (Folder Name Contains Spaces)
我正在編寫一個shell腳本以輸入多個文件夾。 我目前將文件夾的名稱存儲在shell變量中,如path="October\\ @012/"
。 如果我執行cd $path
, 則會收到錯誤提示:cd:October \\:沒有這樣的文件或目錄
我究竟做錯了什么?
這是雙引號的(主要)功能,在csh和* sh shell中是正確的。
cd "$TARGET"
應該這樣做。
Shell變量在"..."
內擴展(不同於'...'
),但是當Shell解析命令行以構造傳遞給程序的字符串時,帶引號的文本被視為單個參數。
例如:
% ls -F
October @012/
% TARGET="October @012"
% cd $TARGET
bash: cd: October: No such file or directory
% cd "$TARGET"
% pwd
/tmp/t/October @012
%
簡單!
在最初的示例中,您做錯的是轉義引號內的空格。 不必兩次對空格進行轉義,並且因為多余的\\
出現在引號內,所以只需在TARGET變量中插入反斜杠即可。 例如:
% TARGET="October\ @012" # wrong!
% ls
October @012/
% cd $TARGET
bash: cd: October\: No such file or directory
% cd "$TARGET"
bash: cd: October\ @012: No such file or directory
%
僅當目錄名為October\\ @012
且目錄中帶有反斜杠時,此TARGET
設置才有效(不建議!):
% mkdir October\\\ @012
% ls -F
October\ @012/
% cd "$TARGET"
% pwd
/tmp/t/October\ @012
%
( 編輯添加示例)
編輯:我最初寫建議使用花括號。 我在半夜醒來時寫了這篇文章,並修改了答案。
首先它實際上取決於哪個殼您在編寫腳本如果是bash的,那么你可以嘗試使用在你的變量名引號:
TARGET="October @012"
cd "$TARGET"
這也可能在其他shell中起作用。 我建議您嘗試一下。
編輯:
重新檢查時,您似乎逃避了表達中的錯誤部分。 嘗試這個:
path="October \@012"
cd "$path"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.