Bash

Bash 中包含引號和空格的變數

  • August 9, 2015

我在 Bash 腳本中嘗試以下操作:

MV_PARAMS='"foo 1" "foo 2"'
mv $MV_PARAMS

我想要實際執行的是:

mv "foo 1" "foo 2"

但這似乎不起作用。試試這個:

mv "$MV_PARAMS"

也不行。

你應該做的是使用一個數組:

mv_params=("foo 1" "foo 2")
mv "${mv_params[@]}"

數組擴展將正確處理帶有空格或特殊字元的數組元素。

在 shell 腳本中處理文件名中的空格通常很複雜。在這種情況下,給定:

MV_PARAMS='"foo 1" "foo 2"'

當你寫:

mv $MV_PARAMS

你最終會mv像這樣執行 shell:

execve("/usr/bin/mv", ["mv", "\"foo", "1\"", "\"foo", "2\""])

也就是說,有四個參數:

  • “富
  • 1"
  • “富
  • 2"

您可以使用該eval命令讓 shell 解析生成的命令行:

eval "mv $MV_PARAMS"

哪個會做你想做的事。使用eval有時會很棘手,在eval似乎是解決方案的情況下,我會經常嘗試重寫一些東西以避免需要它。

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