Bash

使用字元 *、單引號和 $ 定義字元串

  • February 25, 2016

我創建了從另一個“主”腳本獲取的 bash 腳本,以設置主腳本所需的變數。這些變數需要能夠包含任何字元,並且不讓 shell 解釋它們。例如:

  • 單引號:'
  • 美元符號:$
  • 星號:*
  • 井號:# 等

所以,我的想法是使用單引號並轉義任何封閉的單引號和#字元。但是,unexpected EOF while looking for matching下面的兩個文件出現錯誤。

問題:

  1. 定義一個可以包含任何需要最少調整量的字元集的字元串的最佳方法是什麼?

有數千個這樣的foo.sh文件,並且由於從另一個源中提取字元串,我想盡量減少需要轉義的特殊字元的數量。 2. 我還需要逃脫哪些其他角色。

以下腳本的所需輸出是

\MyMacro{*,Baker's Dozen,$x^$,#}

平台:

  • macOS 10.9.5

子外殼:foo.sh

set -f
string_list='*,Baker\'s Dozen,$x^$,\#'
set +f

主外殼:main.sh

source foo.sh
printf "%s{%s}" "\MyMacro" "${string_list}"

您不必#在引號內轉義,而且在單引號內有文字單引號很奇怪:

string_list='*,Baker'\''s Dozen,$x^$,#'

但是使用雙引號更容易。所以像:

string_list="*,Baker's Dozen,\$x^\$,#"

將工作。

您只需要"\""雙引號,而不是''\'''單引號,並且還需要轉義$以防止變數擴展。

如果要最小化轉義,請將任何'內部單引號更改為'"'"'

string_list='*,Baker'"'"'s Dozen,$x^$,#'

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