Bash

文件名中有空格的腳本出現問題

  • October 12, 2017

我有一個腳本,它將 scp 的文件從遠端主機返回到本地。有時文件名包含空格。scp 不喜歡其文件名中的空格。出於某種原因,我處理空格的嘗試沒有導致正確的 scp 路徑。

程式碼:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop

結果是

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

將PATH 括在引號中"$PATH"會產生相同的錯誤。

交換轉義空間的空間也不起作用,儘管據我所知應該:

ESC_PATH=${PATH/' '/'\ '}

儘管列印轉義路徑表明編輯有效:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

您應該同時引用聲明和用法

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

如果不引用第一部分,$path將只包含第一部分。如果不引用第二個,scp則將每個空格分隔的部分視為參數。

(我已更改$PATH$path因為$PATH是一個重要的保留變數,您不得將其用於一般目的。)

我正在嘗試與 ssh 非常相似的東西並通過它傳遞命令行。例如

ssh <somehost> ls -l "$PATH"

我發現簡單地定義“$PATH”並不能解決問題——它仍然會引發錯誤。但是,如果我跑

ssh <somehost> ls -l "\"$PATH"\"

這行得通。訣竅是確保將一組額外的“”從 shell 傳遞給 ssh 命令。

引用自:https://unix.stackexchange.com/questions/57830