GNU/Linux >> Linux の 問題 >  >> Linux

xargs でパラメータを区切ることはできますか?

なぜxargsを固執するのですか? bash はこれをうまく処理できます:

p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]}

echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\]

(私のシェルでは [] をエスケープする必要があります 、走行距離は異なる場合があります)。


検索からこれを見つけた人にとって、受け入れられた答えは私にとってはうまくいきませんでした.

echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\]

生成:

[param 1] [param 1]
[param 2] [param 2]

これは、元の投稿者が xargs を複数のエンティティで読み取り、それらを分離し、それらを単一のコマンド (OP の「エコー」) に個別のパラメーターとして送信するという要件を満たしていません。 Xargs は、この種のタスク用に設計されていません!


bash の回答は機能します。

p=(`echo "param1 param2"`); echo [${p[0]}] [${p[1]}]

生成:

[param1] [param2]

ただし、このソリューションは複数の行では機能しません。


行のペアを引数として単一のコマンドに送信するための bash の正しい解決策は次のとおりです。

(echo 'param 1'; echo 'param 2'; echo 'param 3'; echo 'param 4') | while read line1; read line2; do echo "[$line1] [$line2]"; done

生成:

[param 1] [param 2]
[param 3] [param 4]


GNU Parallel の回答は機能しますが、GNU Parallel を作成してインストールする必要があります。 (Ubuntu に同梱されているバージョンは GNU Parallel ではありません。)


Linux
  1. Bashは独自の入力ストリームに書き込むことができますか?

  2. Xargsを介して複数のパラメーターを渡す?

  3. 4 つのサンプル シェル スクリプトで説明されている Bash の特別なパラメーター

  1. 2 つのサンプル シェル スクリプトで説明されている Bash の位置パラメータ

  2. 使用している Fedora のバージョンを確認するにはどうすればよいですか?

  3. xargs でエイリアス化されたコマンドを使用するにはどうすればよいですか?

  1. Bashスクリプトで1行ずつ読む

  2. Linux シェルでは、複数行の文字列の各行をどのように処理できますか?

  3. Bash変数の文字数をカウントするにはどうすればよいですか