如何在 bash 中进行字符比较?
how to do a character comparison in bash?
假设我有一列显示 2/2
,我想比较分隔符的左侧(在本例中为 /
)是否与右侧匹配?在 bash?
中有什么方法可以做到这一点?
一种可能的方法是使用 IFS
,但这需要将值存储在变量中,然后使用 IF
语句比较它们。我正在尝试使用 oneliner 命令来实现此目的。
您可以使用bash expansion operators提取每个部分并直接比较。
var='2/2'
if [[ "${var%/*}" = "${var#*/}" ]]
then echo match
else echo no match
fi
${var%/*}
删除匹配通配符 /*
的变量的末尾,因此它获得第一个数字。 ${var#*/}
删除匹配通配符 */
的变量开头,因此它得到第二个数字。
虽然您正在寻找 bash
解决方案,但 awk
选项如何:
col="2/2"
echo "$col" | awk -F/ '{print == ? "match" : "no match"}'
-F/
选项将 awk
的字段分隔符设置为 /
。
- 然后输入在
/
上拆分,awk 变量 </code> 分配给
左侧,而 <code>
分配给右侧。
- 现在我们可以比较
</code> 和 <code>
。
假设我有一列显示 2/2
,我想比较分隔符的左侧(在本例中为 /
)是否与右侧匹配?在 bash?
一种可能的方法是使用 IFS
,但这需要将值存储在变量中,然后使用 IF
语句比较它们。我正在尝试使用 oneliner 命令来实现此目的。
您可以使用bash expansion operators提取每个部分并直接比较。
var='2/2'
if [[ "${var%/*}" = "${var#*/}" ]]
then echo match
else echo no match
fi
${var%/*}
删除匹配通配符 /*
的变量的末尾,因此它获得第一个数字。 ${var#*/}
删除匹配通配符 */
的变量开头,因此它得到第二个数字。
虽然您正在寻找 bash
解决方案,但 awk
选项如何:
col="2/2"
echo "$col" | awk -F/ '{print == ? "match" : "no match"}'
-F/
选项将awk
的字段分隔符设置为/
。- 然后输入在
/
上拆分,awk 变量</code> 分配给 左侧,而 <code>
分配给右侧。 - 现在我们可以比较
</code> 和 <code>
。