Linux

Bash 腳本到 tar – 引用問題

  • October 14, 2017

我有一個將文件名作為位置參數的腳本。我對這些執行一些操作,然後對它們進行 tar。目前我的腳本不工作。迴聲線用於調試目的。

請澄清此聲明

但是當我嘗試在腳本中使用 tar 時,如果可以歸檔我想要 tar 的文件。

片段

while [[ $# > 0 ]]; do
   key="$1"
   shift
   files=$files" "\"${key}\"
done

echo tar -cvf backup.tar $files
tar -cvf backup.tar $files

輸出:

tar -cvf backup.tar "test.txt"
tar: "test.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

我在文件名(test.txt)周圍使用雙引號,因為我想處理帶空格的文件。

如果我要刪除腳本中的引號 ("),它會起作用,但我無法處理帶有空格的文件名。

有任何想法嗎?

如果您總是使用所有參數,那麼只需tar像這樣呼叫:tar -cvf backup.tar "$@". 否則,如果您正在選擇一個子集(儘管您沒有顯示它),那麼在一個數組中建構文件列表,如下所示:

declare -a files
while [[ $# > 0 ]]; do
   key="$1"
   shift
   # assume some filtering goes on here
   files+=("$key")
done

tar -cvf backup.tar "${files[@]}"

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