【发布时间】:2018-03-28 16:21:11
【问题描述】:
我有以下 shell 脚本,他们问我如何工作以及 $1 和 $2 参数是什么。
#!/bin/bash
for i in `sort $1`; do
if grep $2 $i > /dev/null; then
echo A
cp $i /tmp
exit
fi
done
echo B;
我的问题是:$1 不能是目录,因为您不能对目录进行排序。因此,它必须是一个文件。但是“for i in file”功能意味着我们将为每一行工作,而“grep”工具不适用于行。
我认为它应该是一个包含文件的文件,但现在我只能想到 tar 文件,它不适用于它们。
谢谢!
【问题讨论】:
-
Don'tReadLinesWithFor -- 这段代码本质上是被破坏的。请参阅 BashFAQ #1 了解有关逐行读取文件的最佳做法。
-
(也就是说,面向行的文件作为一个整体不能安全地用于存储任意文件名的列表,因为文件的名称可以包含换行符。唯一的安全存储适用于任意文件名,例如任意 C 字符串、环境变量等。以 NUL 分隔)。
-
除此之外,还不清楚您实际上在问什么。是为了解释这段代码的工作原理吗?它不能正常工作——它坏了。 (也比我已经介绍的更多方式 - 如果您的文件中有
*作为一行,它将被当前工作目录中所有内容的列表替换)。 -
...你说“我的问题是这个”,但接下来是陈述,而不是问题。
-
另外,请参阅 Meta StackOverflow 上的 How to deal with questions of the type "I don't understand how this code works?" - 共识是此类问题应以“不清楚您在问什么”或“太宽泛”的方式结束。