我有一个不太宽松的程序可以使用。不幸的是,该程序不仅允许以下内容
"command -a -b -c"
Run Code Online (Sandbox Code Playgroud)
或者
"command -abc"
Run Code Online (Sandbox Code Playgroud)
所以我必须总是输入以下内容
command -a && command -b && command -c
Run Code Online (Sandbox Code Playgroud)
我很确定有更有效的输入方式,但无法弄清楚。
Sté*_*las 14
你可以这样做:
echo -a -b -c | xargs -n 1 command
Run Code Online (Sandbox Code Playgroud)
或者:
xargs -n1 command <<< '-a -b -c'
Run Code Online (Sandbox Code Playgroud)
有一些贝壳。
但请注意,它会影响command
.
与zsh
:
autoload zargs # best in ~/.zshrc
zargs -n 1 -- -a -b -c -- command
Run Code Online (Sandbox Code Playgroud)
或者干脆:
for o (-a -b -c) command $o
Run Code Online (Sandbox Code Playgroud)
如果任何command
调用失败,这些都不会中止(除非它以 255 退出状态失败)。
为此,你会想要:
for o (-a -b -c) command $o || break
Run Code Online (Sandbox Code Playgroud)
这仍然无法到$?
失败command
调用的退出状态)。您可以将其更改为:
(){for o (-a -b -c) command $o || return}
Run Code Online (Sandbox Code Playgroud)
但到那个时候,它已经长于:
command -a && command -b && command -c
Run Code Online (Sandbox Code Playgroud)
hee*_*ayl 10
您可以command
通过历史扩展来引用上一个命令行的第一个单词(在您的情况下)!!:0
,然后您可以向其添加必要的参数。
command -a && !!:0 -b && !!:0 -c
Run Code Online (Sandbox Code Playgroud)
例如:
% echo foobar && !!:0 spamegg && !!:0 baz
echo foobar && echo spamegg && echo baz
foobar
spamegg
baz
Run Code Online (Sandbox Code Playgroud)
请注意,正如Stéphane Chazelas 指出的那样,这也可能导致意外的扩展。