相关疑难解决方法(0)

在文件末尾添加新行有什么意义?

一些编译器(尤其是 C 或 C++ 编译器)会发出以下警告:

No new line at end of file
Run Code Online (Sandbox Code Playgroud)

我以为这只是 C 程序员的问题,但 github 在提交视图中显示了一条消息:

\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)

对于 PHP 文件。

我理解这个线程中解释的预处理器的事情,但这与 PHP 有什么关系?它是同一include()件事还是与\r\nvs\n主题有关?

在文件末尾换行有什么意义?

files newlines

265
推荐指数
7
解决办法
17万
查看次数

为什么使用 shell 循环处理文本被认为是不好的做法?

在 POSIX shell 中使用while 循环来处理文本通常被认为是不好的做法吗?

正如Stéphane Chazelas 所指出的,不使用 shell 循环的一些原因是概念可靠性易读性性能安全性

这个答案解释了可靠性易读性方面:

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"
Run Code Online (Sandbox Code Playgroud)

为了性能,从文件或管道读取时,while循环和读取非常慢,因为内置read shell一次读取一个字符。

怎么样的概念安全性方面?

shell text-processing

241
推荐指数
4
解决办法
5万
查看次数

为什么循环查找的输出是不好的做法?

这个问题的灵感来自

为什么使用 shell 循环处理文本被认为是不好的做法?

我看到这些结构

for file in `find . -type f -name ...`; do smth with ${file}; done
Run Code Online (Sandbox Code Playgroud)

for dir in $(find . -type d -name ...); do smth with ${dir}; done
Run Code Online (Sandbox Code Playgroud)

几乎每天都在这里使用,即使有些人花时间对这些帖子发表评论,解释为什么应该避免这种东西......
看到此类帖子的数量(以及有时这些评论被简单地忽略的事实)我想我还不如问一个问题:

为什么循环find的输出是不好的做法,为 返回的每个文件名/路径运行一个或多个命令的正确方法是find什么?

find filenames files for

193
推荐指数
4
解决办法
3万
查看次数

您如何以人类可读的格式列出目录中每个文件的行数。

我有一个包含大型 csv 文件的目录和子目录列表。这些文件大约有 5 亿行,每一行都是一条记录。我想知道

  1. 每个文件有多少行。
  2. 目录中有多少行。
  3. 总共多少行

最重要的是,我需要“人类可读的格式”,例如。12,345,678 而不是 12345678

学习如何以 3 种方式做到这一点会很好。普通的 bash 工具、awk 等,以及 perl(或 python)。

bash awk python perl

67
推荐指数
4
解决办法
15万
查看次数

为什么我的变量在一个“while read”循环中是局部变量,而在另一个看似相似的循环中却不是?

为什么我$x从下面的片段中得到不同的值?

#!/bin/bash

x=1
echo fred > junk ; while read var ; do x=55 ; done < junk
echo x=$x 
#    x=55 .. I'd expect this result

x=1
cat junk | while read var ; do x=55 ; done
echo x=$x 
#    x=1 .. but why?

x=1
echo fred | while read var ; do x=55 ; done
echo x=$x 
#    x=1  .. but why?
Run Code Online (Sandbox Code Playgroud)

pipe shell-script variable-substitution variable

28
推荐指数
3
解决办法
3万
查看次数