加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

比较bash中两个变量的内容

发布时间:2020-12-15 19:46:21 所属栏目:安全 来源:网络整理
导读:我在bash脚本中有一个变量$ data和变量$ file: data=$(echo "$(printf '%sn' "${array[@]/%/$'nn'}")")file=$(scriptfile_results) 那些变量将包含文本。如何比较这两个?一个选择是使用diff(1)实用程序,如下所示: diff -u (echo "$data") (echo "$fil
我在bash脚本中有一个变量$ data和变量$ file:
data=$(echo "$(printf '%sn' "${array[@]/%/$'nn'}")")
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将另一个进程执行echo foo。在某些平台上,如Cygwin,如果经常执行,这可能非常慢。然而,在大多数现代平台上,分叉速度非常快。我只是尝试通过运行脚本一次进行1000个进程替换:

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

在我的旧Mac笔记本电脑上花了0.225秒,而在同一台笔记本电脑上运行的Ubuntu虚拟机中则为2.3秒。除了1000次调用,这表明进程替换需要不到3毫秒,这与diff的运行时间完全不同,也可能不需要担心!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读