比较Bash中的两个小数和打印相似性?

比较Bash中的两个小数和打印相似性?,bash,shell,Bash,Shell,我正在编写一个脚本,比较两个非常相似的十进制数字,我希望该脚本打印两个数字共享的部分。例如,假设我有数字42.86579和42.84578。由于这两个数字都有42.8部分的共同点,我希望脚本输出42.8。我应该如何实现它?a=42.86579 a=42.86579 b=42.84578 [[ ${a%.*} != ${b%.*} ]] && exit for ((i=0;i<${#a};i++)); do if [[ ${a:$i:1} == ${b:$i:1}

我正在编写一个脚本,比较两个非常相似的十进制数字,我希望该脚本打印两个数字共享的部分。例如,假设我有数字42.86579和42.84578。由于这两个数字都有42.8部分的共同点,我希望脚本输出42.8。我应该如何实现它?

a=42.86579
a=42.86579
b=42.84578

[[ ${a%.*} !=  ${b%.*} ]] && exit
for ((i=0;i<${#a};i++)); do 
  if [[ ${a:$i:1} == ${b:$i:1} ]]; then 
    echo -n ${a:$i:1}
  else
    break
  fi
done
b=42.84578 [[${a%.*}!=${b%.*}]]退出(&E) 对于((i=0;i
a=42.86579
b=42.84578
[[${a%.*}!=${b%.*}]]退出(&E)

对于((i=0;i您可以使用
sed
在两个字符串中搜索最长的公共前缀):

$ x=42.86579
$ y=42.84578    
$ sed "s/\(.*\).* \1.*/\1/" <<< "$x $y"
42.8
$x=42.86579
$y=42.84578

$sed“s/\(.*\).*\1.*/\1/”您可以使用
sed
在两个字符串中搜索最长的公共前缀:

$ x=42.86579
$ y=42.84578    
$ sed "s/\(.*\).* \1.*/\1/" <<< "$x $y"
42.8
$x=42.86579
$y=42.84578

$sed“s/\(.*\).*\1.*/\1/“Back reference,好主意!GNU grep:
grep-Po'(.*)也可以这样做。*\K\1'sed的另一个变体:
sed“s/\(.*\).*/\1/“@Cyrus:Cool.我已经更新了答案。
grep
版本仍然是最简洁的:)反向引用,好主意!GNU grep:
grep-Po'(.*)。*\K\1'与sed的另一个变体:
sed“s/\(.*).*/\1/“@Cyrus:Cool。我已经更新了答案。
grep
版本仍然是最简洁的:)
$ grep -Po '(.*).* \K\1' <<< "$x $y"
42.8