给定 bash 参数
foo='ab "cd" "e f" x="1 2" '
我希望生成一个相当于
foo_transformed=( ab '"cd"' '"e f"' 'x="1 2"' )
以可移植的方式,这意味着默认情况下使用 bash (v3+) 内置程序或大多数操作系统 (Linux、Unix、Cygwin) 可用的程序。给定 (几乎) 任意输入字符串,简单性和安全性是理想的。
您可以假设输入不包含单引号'
或反斜杠\
,但可能包含任意数量的空格字符,包括我希望它们分隔字符串的地方和不希望它们分隔字符串的地方(在双引号内)。
如果我们尝试:
foo_transformed=( $foo )
那么 的内部引号foo
将不受尊重 ( for k in "${foo_transformed[@]}"; do echo "- $k"; done
):
- ab
- "cd"
- "e
- f"
- x="1
- 2"
如果我们尝试:
eval foo_transformed=( $foo )
然后引号就丢失了:
- ab
- cd
- e f
- x=1 2