如何简化bash代码?
我在bash中编写了以下代码,这段代码倾向于打印200x13个随机数的矩阵(我们有200行,每行打印13个数字)。我希望这段代码更加灵活,这样就可以更改打印的矩阵大小(行数和每行数),而无需重新编写代码如何简化bash代码?,bash,Bash,我在bash中编写了以下代码,这段代码倾向于打印200x13个随机数的矩阵(我们有200行,每行打印13个数字)。我希望这段代码更加灵活,这样就可以更改打印的矩阵大小(行数和每行数),而无需重新编写代码 for (( k = 0; k < 200; k++ )) do echo $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RAND
for (( k = 0; k < 200; k++ ))
do
echo $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 )) $(( $RANDOM - 16384 ))
done
((k=0;k<200;k++)的
做
echo$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))$($RANDOM-16384))($RANDOM-16384))
完成
感谢您的帮助。首先,您要将列的打印更改为另一个for循环:
for (( k = 0; k < 200; k++ ))
do
for (( j = 0; j < 3; j++))
do
echo -n $(( $RANDOM - 16384 ))" " # print your random number
done
echo # print newline
done
((k=0;k<200;k++)的
做
对于((j=0;j<3;j++)
做
echo-n$($RANDOM-16384))“”#打印您的随机数
完成
echo#打印换行符
完成
然后,可以参数化k max和j max:
rows=200 # set the number of rows
cols=3 # set the number of columns
for (( k = 0; k < $rows; k++ ))
do
for (( j = 0; j < $cols; j++))
do
echo -n $(( $RANDOM - 16384 ))" "
done
echo
done
rows=200#设置行数
cols=3#设置列数
对于((k=0;k<$rows;k++)
做
对于((j=0;j<$cols;j++)
做
echo-n$($RANDOM-16384))“”
完成
回声
完成
首先,要将列的打印更改为另一个for循环:
for (( k = 0; k < 200; k++ ))
do
for (( j = 0; j < 3; j++))
do
echo -n $(( $RANDOM - 16384 ))" " # print your random number
done
echo # print newline
done
((k=0;k<200;k++)的
做
对于((j=0;j<3;j++)
做
echo-n$($RANDOM-16384))“”#打印您的随机数
完成
echo#打印换行符
完成
然后,可以参数化k max和j max:
rows=200 # set the number of rows
cols=3 # set the number of columns
for (( k = 0; k < $rows; k++ ))
do
for (( j = 0; j < $cols; j++))
do
echo -n $(( $RANDOM - 16384 ))" "
done
echo
done
rows=200#设置行数
cols=3#设置列数
对于((k=0;k<$rows;k++)
做
对于((j=0;j<$cols;j++)
做
echo-n$($RANDOM-16384))“”
完成
回声
完成
要简单地执行此操作,只需添加一个嵌套循环来重复列
在bash中,您还可以使用大括号扩展执行for循环
for a in {1..200}
do # Rows...
for b in {1..13}
do # Columns...
echo -n "$(( $RANDOM - 16384 )) "
# -n suppresses newlines
done
echo
# do newline at the end of the row.
done
如果剧本变得更复杂。我建议将脚本抽象为函数
function printRandomNumber() {
seed={1:-16384}
echo -n "$(( $RANDOM - $seed ))"
}
function printRandomMatrix() {
rows={1:-200} # default 200 if not set.
cols={2:-13} # default 13 if not set.
for a in {1..$rows}
do
for b in {1..$cols}
do
printRandomNumber
done
echo
done
}
那就叫它
printRandomMatrix
# print the default row/column matrix.
printRandomMatrix 10 10
# print a matrix of 10 by 10.
这样,您可以更轻松地维护脚本并适应更改,例如,如果需要使用
printf
格式化输出,如D.Shawley的回答所示。当然,您可能需要各种可能的视觉格式(左/右列对齐等),这些可以通过各种技巧实现 要简单地执行此操作,只需添加一个嵌套循环来重复列
在bash中,您还可以使用大括号扩展执行for循环
for a in {1..200}
do # Rows...
for b in {1..13}
do # Columns...
echo -n "$(( $RANDOM - 16384 )) "
# -n suppresses newlines
done
echo
# do newline at the end of the row.
done
如果剧本变得更复杂。我建议将脚本抽象为函数
function printRandomNumber() {
seed={1:-16384}
echo -n "$(( $RANDOM - $seed ))"
}
function printRandomMatrix() {
rows={1:-200} # default 200 if not set.
cols={2:-13} # default 13 if not set.
for a in {1..$rows}
do
for b in {1..$cols}
do
printRandomNumber
done
echo
done
}
那就叫它
printRandomMatrix
# print the default row/column matrix.
printRandomMatrix 10 10
# print a matrix of 10 by 10.
这样,您可以更轻松地维护脚本并适应更改,例如,如果需要使用printf
格式化输出,如D.Shawley的回答所示。当然,您可能需要各种可能的视觉格式(左/右列对齐等),这些可以通过各种技巧实现 将其放在a中并使用,而不是echo
printMatrix() {
cols=${1:-13}
rows=${2:-200}
for (( i=0; i<$rows; i++ ))
do
for (( j=0; j<$cols; j++ ))
printf "%13d" $(( $RANDOM - 16384))
done
echo
done
}
printMatrix # will print 200x13 matrix
printMatrix 5 10 # with print 10x5 matrix
将其放在a中并使用,而不是echo
printMatrix() {
cols=${1:-13}
rows=${2:-200}
for (( i=0; i<$rows; i++ ))
do
for (( j=0; j<$cols; j++ ))
printf "%13d" $(( $RANDOM - 16384))
done
echo
done
}
printMatrix # will print 200x13 matrix
printMatrix 5 10 # with print 10x5 matrix
我想你的意思是参数化行/列(当然,只是语义,因为你指的是同一件事。)我想你的意思是参数化行/列(当然,只是语义,因为你指的是同一件事。)我建议我们清理噪音。我建议我们清理噪音。