我使用这个答案来比较所需的最小版本号。但在我进行比较之前,我实际上一直纠结于如何提取版本号。
我当前的脚本看起来像这个
#!/usr/bin/env bash
x=`pgsync -v`
echo "---"
echo $x
其输出为
> ./version-test.sh
0.6.7
---
我也尝试过使用x="$(pgsync -v)"
,但仍然得到一个空字符串。我在这里做错了什么。
如果您试图在变量中捕获命令的输出,而它却被打印到终端,这表明该命令没有写入其标准输出,而是写入另一个流-通常是标准错误。所以只要重定向它:
x=$(pgsync -v 2>&1)
顺便说一句,将明确请求的版本号写入标准错误而不是标准输出是违反直觉的,可以说是一个错误。
此外,更喜欢$()
命令替换而不是倒勾;有关详细信息,请参阅Bash常见问题082。