簡體   English   中英

用於輸入目錄的Shell腳本(文件夾名稱包含空格)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM