我试图找出一种显示从用户输入输入的最长行的方法。
例如,我的脚本到目前为止将有4行的用户输入:
您好
你好
你好,特纳
你好,特纳蜂蜜
在我的代码中,我有:
echo "Please enter 4 lines:"
read LINE1
read LINE2
read LINE3
read LINE4
我想知道是否有办法让我计算每一行,然后输出最大的一行。制作文件可能是最简单的,但我想知道我是否可以使用Bash命令来执行此操作。
答案 0 :(得分:1)
如果您只对最长的行感兴趣,那么您可以使用循环并将当前行与您阅读的下一行进行比较:
#!/bin/bash
max=0
for((i=0;i<4;i++)); do
read -r line
len=${#line}
if [[ len -gt max ]] ; then
max=$len
long="${line}"
fi
done
echo longest line="${long}" length="${max}"
如果你想保留其他行,那么你可以使用数组并在数组上应用相同的逻辑。
答案 1 :(得分:1)
当两条或更多条线的长度相同时,您不会解释您预期会发生什么。因此,我假设当两条线的长度相同时,应该存储并报告较新的线为“最长”。
使用Bash 4.x执行此操作的更惯用(并且在我看来更清楚)的方式是:
#!/usr/bin/env bash
# Guard against exported environment variables.
unset longest_line
for line in {1..4}; do
read -p "Enter line $line: "
(( "${#REPLY}" >= "${#longest_line}" )) && longest_line="$REPLY"
done
echo "$longest_line"
它使用各种shell expansions,读取内置的-p
标志来提示,读取默认的 REPLY 变量来保存结果,以及与目前为止执行关键任务的最长线进行的线长比较。
在这个例子中,您甚至不必为 longest_line 初始化一个值,因为未设置变量的长度为零,但这是一个很好的防御性编程实践,不依赖于变量是未设置。如果您希望自己实际设置变量的初始状态,可以使用longest_line=''
将其设置为空字符串。
上面的代码将生成预期结果:
$ bash longest_line.sh Enter line 1: foo Enter line 2: bar Enter line 3: foo bar Enter line 4: baz foo bar