我在 bash 中测试了一些东西,我决定将文件中的行数与唯一行数进行比较。我确实知道我可以简单地创建 2 个临时变量来存储相应的值并比较它们,但我想知道在 1 行中这样做的方式。
例如,我认为这种方法可行:test `wc -l filename` -eq `uniq filename|wc -l`
. 我得到错误-bash: test: too many arguments
。我的错误在哪里?如果不使用临时变量,你会怎么做?
我在 bash 中测试了一些东西,我决定将文件中的行数与唯一行数进行比较。我确实知道我可以简单地创建 2 个临时变量来存储相应的值并比较它们,但我想知道在 1 行中这样做的方式。
例如,我认为这种方法可行:test `wc -l filename` -eq `uniq filename|wc -l`
. 我得到错误-bash: test: too many arguments
。我的错误在哪里?如果不使用临时变量,你会怎么做?
您无法进行直接比较,因为仅
wc -l file
输出[number] file
和uniq file | wc -l
输出[number]
。您可以按照@stelldriver 的建议进行操作,使用 将文件重定向到wc
的标准输入wc -l < file
,以便仅[number]
输出,或使用 awk 仅获取第一个字段(见下文)。此外,反引号不利于可读性。更喜欢
$(command)
构造。你会得到“太多参数”,因为你的表达式没有被引用,所以 shell 将
[number] file
输出分成两个单词而不是一个单词。总而言之,这就是你所追求的:
我们将
wc -l file
输出传递给 awk 以便只获得第一个字段,即[number]
.echo
只是为了让答案更清楚,请通过在命令前面加上 an 来查看您最初的尝试会发生什么:可以看出,该命令有 4 个参数
test
:19
、file
和。-eq
17
如果您尝试我建议的方法,您将与 3 个参数进行适当的比较
test
: