Thu*_*olt 2 bash if-statement pipe conditional-statements
我想写一个命令来比较文件的哈希值。我写了下面的单行命令。想了解如何在管道中将上一个命令的输出作为当前命令的变量。
例如。下面的命令我想将第一个命令“计算散列”的输出与原始散列进行比较。在上一条命令中,我想参考上一条命令的输出。我如何在 if 语句中做到这一点?(而不是$0
)
sha256sum abc.txt | awk '{print $1}' | if [ "$0" = "8237491082roieuwr0r9812734iur" ]; then
echo "match"
fi
Run Code Online (Sandbox Code Playgroud)
遵循您的狭窄请求如下所示:
sha256sum abc.txt |
awk '{print $1}' |
if [ "$(cat)" = "8237491082roieuwr0r9812734iur" ]; then echo "match"; fi
Run Code Online (Sandbox Code Playgroud)
...因为cat
没有参数读取命令的标准输入,并且在管道中,从先前阶段生成的内容被流式传输到它们的后继阶段。
交替:
sha256sum abc.txt |
awk '{print $1}' |
if read -r line && [ "$line" = "8237491082roieuwr0r9812734iur" ]; then echo "match"; fi
Run Code Online (Sandbox Code Playgroud)
...其中我们read
只有来自 stdin 的一行,而不是使用cat
. (要改为遍历 stdin 上给出的所有行,请参阅BashFAQ #1)。
但是,我强烈建议将其写为:
if [ "$(sha256sum abc.txt | awk '{print $1}')" = "8237491082roieuwr0r9812734iur" ]; then
echo "match"
fi
Run Code Online (Sandbox Code Playgroud)
...其中,除其他外,将您的逻辑保留在管道之外,因此您的if
语句可以设置在管道退出后保持设置的变量。有关在管道中运行代码所固有的问题的更多详细信息,请参阅BashFAQ #24。
归档时间: |
|
查看次数: |
895 次 |
最近记录: |