在bash脚本中,我启动带有选项的 Vim :
vim "-c startinsert" "+normal 2G4|" foo
需要双引号,但是可以用简单的双引号代替:
vim '-c startinsert' '+normal 2G4|' foo
由于这些选项可能因一个文件而异,我想将它们存储在字符串中,通常是:
opt='"-c startinsert" "+normal 2G4|"'
然后:
vim $opt foo
但是那行不通,我尝试使用引号,双引号,转义等所有组合...
实际上,我发现它起作用的唯一方法是每个字符串仅存储一个选项:
o1="-c startinsert"
o2="+normal 2G4|"
vim "$o1" "$o2" foo
那么,是否可以在字符串中存储两个(或多个)选项?因为当我尝试时, bash 似乎将它们解释为文件名,例如:
opt='"-c startinsert" "+normal 2G4|"'
vim "$opt" foo
Vim 将打开两个文件:
""-c startinsert" "+normal 2G4|""
foo
而不是使用选项foo
打开"-c startinsert" "+normal 2G4|"
。
答案 0 :(得分:2)
请参见I'm trying to put a command in a variable, but the complex cases always fail!
使用数组
opts=(
-c "startinsert"
"+normal 2G4|"
)
vim "${opts[@]}" foo
答案 1 :(得分:0)
我建议使用数组,您可以轻松地操作它,甚至在扩展时甚至可以使用一些替换。
还要注意,-c
等效于直接以+
开始命令。
opt=(startinsert 'normal 2G4|')
# opt+=('normal l')
vim "${opt[@]/#/+}" foo
最后一行自动在每个参数前加上+
。