![在一行中输出到 bash 中的文件和变量时出现问题](https://linux22.com/image/179016/%E5%9C%A8%E4%B8%80%E8%A1%8C%E4%B8%AD%E8%BE%93%E5%87%BA%E5%88%B0%20bash%20%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%92%8C%E5%8F%98%E9%87%8F%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我想用来$RANDOM
创建以下输出并将其全部写入文件和变量中。
123
24234
758
4893
我的尝试如下,但没有一个成功。我尝试过了重定向printf
toread
和 then的标准输出重定向到一个file
$ read var < printf "%s\n" $RANDOM $RANDOM $RANDOM $RANDOM > file
我也尝试过管道printf
to read
then的标准输出重定向至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