一連の数字を印刷してから最後に何かを追加するのに問題があります。
seq 1 3 | xargs -I {} echo {} 4
明らかにする
1 4
2 4
3 4
しかし、結果が出てほしい
1 2 3 4
私は学んでいるので、これを達成するためにxargs
それを使用したいと思いますxargs
。
ベストアンサー1
command
GNUを介して単一の呼び出しに特定の行数を引数として渡すには、xargs
次のコマンドを実行できます。
multi-line cmd | xargs -d '\n' -n N command
\n
つまり、区切り文字として使用され、一度に1N
行を渡すことは実行するのと同じです。command
command line1 line2 ... lineN
次にxargs
、次のようにします。
input | xargs [options] [command [initial-arguments]]
つまり、ビルド時にコマンドラインに追加されたすべてのパラメータは、xargs
初期パラメータの後に表示されます。command
multi-line cmd | xargs -d '\n' -n N command initial-args
実行されます
command initial-args line1 line2 ... lineN
だからあなたは走ることはできません。
seq 1 3 | xargs -d '\n' -n 3 echo 4
4
初期パラメータとして処理され、最終結果は次のようになるため、予想される出力が得られます。
4 1 2 3
あなたができることは、sh
ellを呼び出して実行することですcommand
。これにより、最後に追加のパラメータを追加できます。
seq 1 3 | xargs -d '\n' -n 3 sh -c 'echo "$@" 4' bang
1 2 3 4
bang
上記の行に何と書かれていますか?sh -c
通事論はい
sh -c command_string [command_name [argument...]]
したがって、(位置パラメータに展開されます。この場合によって追加されたパラメータ)'echo "$@" 4'
特殊パラメータです(たとえば、任意の名前を使用できます)。読む価値があります。command_string
$@
xargs
bang
0
command_name
sh
$ 0が位置パラメータではないのはなぜですか?
xargs
私の投稿はGNUとその独自のスイッチに言及していることに注意してください-d
。または、シェルでこれを実行して出力行を配列に保存し、その要素をcommand
別の引数の前に引数として渡すこともできます
。bash
readarray -t args < <(multi-line cmd)
command "${args[@]}" additional-arg(s)
またはzsh
args=("${(@f)$(multi-line cmd)}")
command "${args[@]}" additional-arg(s)
1: この線が限界内にあるとN
仮定します。ARG_MAX