1行でbashのファイルと変数として出力するのに問題があります。

1行でbashのファイルと変数として出力するのに問題があります。

$RANDOM次の出力を生成し、それらをすべてファイルと変数に書き込むために使用したいと思います。

123
24234
758
4893

私の試みは次のとおりです。しかし、それらのどれも成功しませんでした。頑張ったリダイレクトprintftoreadおよび then の標準出力リダイレクトfile

$ read var < printf "%s\n" $RANDOM $RANDOM $RANDOM $RANDOM > file

私も試しました管路printfreadそれまでの標準出力リダイレクトfile

$ printf "%s\n" $RANDOM $RANDOM $RANDOM $RANDOM | read var > file

私の問題が何であるかを理解するのに役立つ人はいますか?

答え1

read入力を受け取り、変数に割り当てるために使用されます。出力は生成されないため、リダイレクトは空のファイルのみを生成します。

あなたはそれを使用することができますtee注文する代わりに。これはstdinから入力を受け取り、stdoutと1つ以上のファイルに出力を書き込みます。

変数割り当てを使用すると、tee次のことができます。

$ variable=$(printf "%s " $RANDOM $RANDOM $RANDOM $RANDOM | tee variable.txt)

出力が1行になるように要求したので、「%s」を使用しました。

次に、以下を提供します。

$ echo $variable
31738 28009 6462 15565

$ cat variable.txt
31738 28009 6462 15565

答え2

ただし:

var="$RANDOM
$RANDOM
$RANDOM
$RANDOM
$RANDOM"

printf '%s\n' "$var" > file

または、スカラー変数に改行区切りリストを格納する代わりに、数値を配列の要素として使用する場合:

var=("$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM")
printf '%s\n' "${var[@]}" > file

関連情報