如果我gshuf -e $(seq 1 10)在 bash 中执行,它将以随机顺序打印数字 1 到 10。
但如果我这样做:
a=$(shuf -e $(seq 1 10))
for i in "${a[@]}"
do
echo $i
echo "next"
done
Run Code Online (Sandbox Code Playgroud)
它打印所有十个数字,后跟“下一个”。
如何循环 shuf(或 os x 中的 gshuf)的输出?变量 ,a似乎是一个字符串,所以我可以拆分它。但这似乎有点草率。如何让 shuf 输出数组?
Jan*_*nis 11
您正在使用标量分配。要么使用数组
a=( $(shuf -e $(seq 1 10)) )
for i in "${a[@]}"
do
echo $i
echo "next"
done
Run Code Online (Sandbox Code Playgroud)
或者让外壳分裂标量
a=$(shuf -e $(seq 1 10))
for i in ${a}
do
echo $i
echo "next"
done
Run Code Online (Sandbox Code Playgroud)
您不需要将输出存储在变量中:
seq 10 | shuf | while read i; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
这会在子 shell 中运行 while 循环,因此该i变量无法持续到当前 shell 中。你可以shopt -s lastpipe反驳,或者完全避免管道
while read i; do echo $i; done < <( shuf -e $(seq 10) )
Run Code Online (Sandbox Code Playgroud)