関数をエクスポートすると、それが実行されます(テストされていません):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
printf
external の代わりにbuiltin を使用できますseq
。
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
また、return 0
and exit 0
like that を使用すると、その前のコマンドによって生成される可能性のあるエラー値がマスクされます。また、エラーがない場合はデフォルトであり、多少冗長です。
@phobic は、Bash コマンドを次のように簡略化できると述べています。
bash -c 'echo_var "{}"'
{}
その中に直接移動します。しかし、@Sasha が指摘したように、コマンド インジェクションに対して脆弱です。
埋め込み形式を使用してはならない理由の例を次に示します。
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
できない理由の別の例:
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
これは、安全な形式を使用して出力されるものです。
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
これは、パラメータ化されたSQLクエリを使用してインジェクションを回避することに匹敵します。
非破壊的であるため、Sashaのコメントで使用されているコマンドのdate
代わりに、コマンド置換またはエスケープされた引用符で使用しています。rm