相关疑难解决方法(0)

为什么使用 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万
查看次数

“猫”和“猫&lt;”的区别

我是通过一个教程和锯同时使用的工作cat myfile.txtcat < myfile.txt。这两个命令序列之间有区别吗?似乎都将文件的内容打印到 shell。

io-redirection cat

74
推荐指数
4
解决办法
2万
查看次数

修改文本文件只有一个数字受约束

我有一个文本文件 a.txt,其内容是 0 到 100 之间的数字。我需要一个命令来修改 a.txt,将数字增加 10,但在最终结果必须小于 100(即如果数字达到一个大于 100 的值(例如 95+10=105),它就保持在 100 上)。

我还需要一个最多减少 10 的命令,但最终结果大于或等于 0,它应该是类似的。

我能做的是直接用 echo 修改文件,但这样我就可以用其他东西替换数字(而不是添加到以前的数字)。

text-processing

3
推荐指数
1
解决办法
81
查看次数

是否有 POSIX shell 通过使用就地运算符完全消除了对 `cat` 和 `dd` 的需要?

在 Vidar Holen 的博客文章Useless Use of dd 中,他认为这dd实际上是无用的,主要是因为一切都是文件,并且文件可以通过管道传输。

我们还经常在所有 *nix 站点上看到积极劝阻使用cat.

然而,随后Vidar提出了这个例子:

# Rip a cdrom to a .iso file
cat /dev/cdrom > myfile.iso
Run Code Online (Sandbox Code Playgroud)

...我想知道,是否可以在不使用的cat情况下做到这一点?

显然,POSIX shell 假设第一组字符是一个命令(因此“[”=“test”等),这在具有就地运算符的现代语言中是不寻常的。而且,作为一个 shell 实际上是一个解释器,为什么我们没有达到catdd都是多余的地步?

是否有任何基于 POSIX 的 shell 已经完全实现了就地运算符,/dev/cdrom > myfile.iso以至于足以将数据从设备复制到文件?

或者

POSIX 规范中是否有某些内容使这种功能变得不可能?

请注意,此问题与 UUOC 问题略有不同,因为示例仍然使用开头的命令(“<”)而不是就地运算符。所以它仍然符合 first-word-is-a-command 规则。

(顺便说一句,我个人喜欢 dd 因为,如果没有它,说威尔士语会变得不那么有趣。:-p)

shell posix

1
推荐指数
1
解决办法
199
查看次数

标签 统计

shell ×2

text-processing ×2

cat ×1

io-redirection ×1

posix ×1