如何显示在 Bash 提示符中输入的最长行?
How can I display the longest line entered into a Bash prompt?
我正在尝试找出一种方法来显示用户输入的最长行。
例如,到目前为止我的脚本将有 4 行用户输入:
Hello
Hello will
Hello will turner
Hello will turner honey
在我的代码中我有:
echo "Please enter 4 lines:"
read LINE1
read LINE2
read LINE3
read LINE4
我想知道是否有办法让我计算每一行,然后输出最大的一行。制作一个文件可能是最简单的,但我想知道我是否可以只使用 Bash 命令来完成。
如果您只对最长的行感兴趣,那么您可以使用循环并将 当前 行与您阅读的下一行进行比较:
#!/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}"
如果你想保留其他行,那么你可以使用数组并在数组上应用相同的逻辑。
假设
您没有解释当两条或多条线的长度相同时您期望发生什么。因此,我假设当两行长度相同时,应该将较新的行存储并报告为 "longest."
将行长度与 Bash 扩展进行比较
使用 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,read builtin的-p
标志来提示,read的默认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
我正在尝试找出一种方法来显示用户输入的最长行。
例如,到目前为止我的脚本将有 4 行用户输入:
Hello
Hello will
Hello will turner
Hello will turner honey
在我的代码中我有:
echo "Please enter 4 lines:"
read LINE1
read LINE2
read LINE3
read LINE4
我想知道是否有办法让我计算每一行,然后输出最大的一行。制作一个文件可能是最简单的,但我想知道我是否可以只使用 Bash 命令来完成。
如果您只对最长的行感兴趣,那么您可以使用循环并将 当前 行与您阅读的下一行进行比较:
#!/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}"
如果你想保留其他行,那么你可以使用数组并在数组上应用相同的逻辑。
假设
您没有解释当两条或多条线的长度相同时您期望发生什么。因此,我假设当两行长度相同时,应该将较新的行存储并报告为 "longest."
将行长度与 Bash 扩展进行比较
使用 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,read builtin的-p
标志来提示,read的默认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