在一行中输出到 bash 中的文件和变量时出现问题

在一行中输出到 bash 中的文件和变量时出现问题

我想用来$RANDOM创建以下输出并将其全部写入文件和变量中。

123
24234
758
4893

我的尝试如下,但没有一个成功。我尝试过了重定向printftoread和 then的标准输出重定向到一个file

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

我也尝试过管道printfto readthen的标准输出重定向file

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

有人可以帮助我了解我的问题出在哪里吗?

答案1

read用于获取输入并将其分配给变量。它不产生输出,因此重定向只会产生一个空文件。

您可以使用tee命令反而。它从 stdin 获取输入,并将输出写入 stdout 以及一个或多个文件。

使用tee变量赋值,你可以这样做:

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

请注意,我使用了“%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

相关内容