【发布时间】:2021-11-24 16:55:01
【问题描述】:
假设我有一列显示2/2,我想比较分隔符的左侧(在这种情况下为/)是否与右侧匹配?有没有办法在 bash 中实现这一点?
一种可能的方法是使用IFS,但这需要将值存储在变量中,然后使用IF 语句进行比较。我正在尝试使用 oneliner 命令来实现这一点。
【问题讨论】:
-
您必须将 something 存储在变量中。一些文本,一个文件名,一个列号,一些东西
假设我有一列显示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 $1==$2 ? "match" : "no match"}'
-F/ 选项将awk 的字段分隔符设置为/。/ 上拆分输入,并将awk 变量$1 分配给
左侧,而$2 分配到右侧。$1 和$2。【讨论】: