Bash: 如何在一个字符串中存储多个选项?
Bash: how to store multiple options in a string?
在 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
而不是使用选项 "-c startinsert" "+normal 2G4|"
打开 foo
。
见I'm trying to put a command in a variable, but the complex cases always fail!
使用数组
opts=(
-c "startinsert"
"+normal 2G4|"
)
vim "${opts[@]}" foo
我建议使用数组,你可以轻松操作它,甚至在扩展时使用一些替换。
此外,请注意 -c
相当于直接使用 +
开始命令。
opt=(startinsert 'normal 2G4|')
# opt+=('normal l')
vim "${opt[@]/#/+}" foo
最后一行自动为每个参数添加 +
。
在 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
而不是使用选项 "-c startinsert" "+normal 2G4|"
打开 foo
。
见I'm trying to put a command in a variable, but the complex cases always fail!
使用数组
opts=(
-c "startinsert"
"+normal 2G4|"
)
vim "${opts[@]}" foo
我建议使用数组,你可以轻松操作它,甚至在扩展时使用一些替换。
此外,请注意 -c
相当于直接使用 +
开始命令。
opt=(startinsert 'normal 2G4|')
# opt+=('normal l')
vim "${opt[@]/#/+}" foo
最后一行自动为每个参数添加 +
。