gpt4 book ai didi

bash - 比较bash中两个变量的内容

转载 作者:行者123 更新时间:2023-11-29 08:41:52 28 4
gpt4 key购买 nike

我有一个变量 $data和变量 $file在 bash 脚本中:

data=$(echo "$(printf '%s\n' "${array[@]/%/$'\n\n'}")")
file=$(<scriptfile_results)

这些变量将包含文本。如何比较这两者?一种选择是像这样使用 diff(1) 实用程序:

diff -u <(echo "$data") <(echo "$file")

这是比较两个变量内容的正确且优雅的方法吗?另外怎么是<( )技术叫什么?据我了解,对于每个 <( )创建一个临时文件(命名管道)..

最佳答案

是的,diff <(echo "$foo") <(echo "$bar")很好。

通过搜索 bash manpage对于字符 <( ,你会发现这叫做“进程替换”。

你不必担心创建临时文件的效率问题,因为临时文件实际上只是一个管道,而不是磁盘上的文件。试试这个:

$ echo <(echo foo)
/dev/fd/63

这表明临时文件实际上只是管道“文件描述符 63”。虽然它出现在虚拟/dev文件系统,磁盘永远不会被触及。

您在这里可能需要担心的实际效率问题是“流程替换”的“流程”部分。 Bash fork 另一个进程来执行 echo foo .在某些平台上,如 Cygwin,如果频繁执行,这可能会非常慢。然而,在大多数现代平台上,fork ing 非常快。我只是尝试通过运行脚本一次执行 1000 个进程替换:

echo <(echo foo) <(echo foo) ... 997 repetitions ... <(echo foo)

在我的旧 Mac 笔记本电脑上用了 0.225 秒,在同一台笔记本电脑上运行的 Ubuntu 虚拟机上用了 2.3 秒。除以 1000 次调用,这表明进程替换花费的时间不到 3 毫秒——这与 diff 的运行时间相比完全相形见绌。 ,而且可能没有任何您需要担心的事情!

关于bash - 比较bash中两个变量的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437104/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com