Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 数线,这样我就可以在上面循环-为什么这是一个反模式?_Bash_Shell_Anti Patterns - Fatal编程技术网

Bash 数线,这样我就可以在上面循环-为什么这是一个反模式?

Bash 数线,这样我就可以在上面循环-为什么这是一个反模式?,bash,shell,anti-patterns,Bash,Shell,Anti Patterns,我发布了下面的代码,遭到了责骂。为什么这是不可接受的 numberOfLines=$wc-lshell和基本上高于汇编语言的每种编程语言都已经知道如何循环文件中的行;它不需要知道将有多少行来获取下一行-在您的示例中,引人注目的是,sed已经这样做了,因此如果shell不能这样做,您可以循环sed的输出 在shell中的文件行上循环的正确方法是使用while read。这里有两个复杂的问题-通常,您重置IFS以避免shell不必要地将输入拆分为令牌,并且您使用read-r以避免在原始Bourne

我发布了下面的代码,遭到了责骂。为什么这是不可接受的


numberOfLines=$wc-lshell和基本上高于汇编语言的每种编程语言都已经知道如何循环文件中的行;它不需要知道将有多少行来获取下一行-在您的示例中,引人注目的是,sed已经这样做了,因此如果shell不能这样做,您可以循环sed的输出

在shell中的文件行上循环的正确方法是使用while read。这里有两个复杂的问题-通常,您重置IFS以避免shell不必要地将输入拆分为令牌,并且您使用read-r以避免在原始Bourne shell的read实现中使用反斜杠的一些讨厌的遗留行为,这些行为是为了向后兼容而保留的

而IFS=read-r;做 用亚麻布做事
完成shell和基本上高于汇编语言的每种编程语言都已经知道如何循环文件中的行;它不需要知道将有多少行来获取下一行-在您的示例中,引人注目的是,sed已经这样做了,因此如果shell不能这样做,您可以循环sed的输出

在shell中的文件行上循环的正确方法是使用while read。这里有两个复杂的问题-通常,您重置IFS以避免shell不必要地将输入拆分为令牌,并且您使用read-r以避免在原始Bourne shell的read实现中使用反斜杠的一些讨厌的遗留行为,这些行为是为了向后兼容而保留的

而IFS=read-r;做 用亚麻布做事 在显著的开销上做了一些扩展。通过执行OP中介绍的操作,您可以一次又一次地执行各种操作。这包括打开文件、读取文件直到感兴趣的行、关闭文件。这确保了原始程序的复杂性在^2上,而在这个答案中,它只取决于您打开、读取和关闭文件的次数。对于大型文件以及存储在基于网络的文件系统上的文件,原始过程将变得非常缓慢。这会增加一点开销。通过执行OP中介绍的操作,您可以一次又一次地执行各种操作。这包括打开文件、读取文件直到感兴趣的行、关闭文件。这确保了原始程序的复杂性在^2上,而在这个答案中,它只取决于您打开、读取和关闭文件的次数。对于大型文件以及存储在基于网络的文件系统上的文件,原始过程将变得非常缓慢。