我想找到字符串中新行的数量,然后在循环中使用这个数字while
作为限制。
我可以使用以下方法查找并写出行数:
echo "$MY_STRING" | grep -c '$'
为了将行数设置为整数并在 while 循环中使用它,我这样做:
MYNUM="$MY_PEERS" | grep -c '$'
然而,这一行立即向终端写入 0,这不是我的字符串中的行数。此外,我不能MYNUM
循环使用while
。 (我$MYNUM
在 中使用while
)如何获取行数,以便我可以在循环中使用它while
作为限制?
答案1
虽然我不完全明白为什么你需要这个,这是你完成它的一种方法。关键是$( )
捕获输出并将其分配给变量。
代码:
#!/usr/bin/env bash
IFS='' read -r -d '' TEST_STR <<-'EOF'
Test text
quick brown fox
lazy dog
EOF
NEW_LINE_COUNT=$(echo "$TEST_STR" | wc -l)
echo "$TEST_STR"
echo "$NEW_LINE_COUNT"
结果:
Test text
quick brown fox
lazy dog
4
答案2
您无需计算多行字符串中的行数即可查看各个设备。与数组变量一起使用的循环for
可以在这里使用,如下所示:
IFS=$'\n' read -d '' -r -a Multi_Line_Str <<STR
$(printf '%s\n' 'device_'{A..E})
STR
for device in "${Multi_Line_Str[@]}"
do
echo "<$device>"
done
答案3
如果你有一个多行字符串,你可以简单地使用wc -l
它来计算其中的行数:
printf '%s' "$string" | wc -l
将该数字存储在变量中:
nlines=$( printf '%s' "$string" | wc -l )
但是,执行 while 循环不需要这个数字:
printf '%s' "$string" |
while read -r line; do
# do something with "$line"
done
根据您对每行所做的操作,您可能根本不需要 while 循环:
printf '%s' "$string" | awk '<some awk script>'
根据数据的生成方式,您甚至可能根本不需要将其存储在多行变量中:
some_command | some_line_by_line_processing
这里,some_command
可能是 while 循环、子 shell 中的命令集合((...)
)或生成输出的简单命令,也some_line_by_line_processing
可能是简单命令(如awk
)或循环或您需要逐行处理管道第一部分的输出的任何其他东西。