2016-09-15 20 views
0

我在OSX中使用終端(bash),並試圖創建一個可執行腳本,將從輸入創建一個目錄,但我有問題時輸入一個字符串與空格我需要空間)。終端(bash) - 從讀輸入字符串mkdir

例如,在下面的代碼中輸入「新建文件夾」時,當然會創建兩個名爲「new」和「folder」的文件夾。

read dName; mkdir $dName 

但與下面的代碼,由於某種原因,我得到一個名爲此文件夾:如果我把第二個代碼到終端不使用可執行腳本「%80%9D

read dName; mkdir "$dName" 

,它工作。我不知道爲什麼使用可執行腳本運行它給我「%80%9D而不是文件夾名稱。如果可能的話請幫忙。

+0

您確定您在代碼中使用常規ASCII引號,還是使用了大寫引號?右卷符'''恰好具有'E2 80 9D'作爲它的UTF-8編碼。 – chepner

回答

1

您的腳本中使用了大括號而不是普通的ASCII引號。你的腳本是UTF-8編碼,這意味着參數mkdir存儲爲後面的字節流:

  • e2 80 9c - 左花報價
  • 24 64 4e 61 6d 65 - $dbash
  • e2 80 9d - 右花報價

但是,當腳本爲運行時,這些字節似乎使用ISO-Latin-1解釋。由於e2是標識符名稱的有效字節,並且捲曲引號實際上不會轉義任何內容,因此bash$dBash%E2看作是展開爲單個未定義變量的擴展爲空字符串的變量。因此,mkdir收到%e2%80%9c%90%9d作爲其論點。所請求的文件名被創建。列出目錄時,前三個字節再次被解釋爲UTF-8以顯示左引號,但其餘兩個沒有解釋並按原樣顯示。

+0

回家信息:使用* text *編輯器編輯代碼,而不是文字處理器。 –