如何在bash中找到两个字符串之间的常用字符?

joh*_*nes 5 string bash shell

例如:

s1="my_foo"
s2="not_my_bar"
Run Code Online (Sandbox Code Playgroud)

期望的结果将是my_o.我怎么在bash中这样做?

dog*_*ane 9

我的解决方案用于fold将字符串分成每行一个字符,sort对列表进行排序,comm比较两个字符串,最后tr删除新行字符

comm -12 <(fold -w1 <<< $s1 | sort -u) <(fold -w1 <<< $s2 | sort -u) | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

或者,这是一个纯Bash解决方案(它也维护字符的顺序).它遍历第一个字符串并检查第二个字符串中是否存在每个字符.

s="temp_foo_bar"
t="temp_bar"
i=0
while [ $i -ne ${#s} ]
do
    c=${s:$i:1}
    if [[ $result != *$c* && $t == *$c* ]]
    then
      result=$result$c
    fi
    ((i++))
done
echo $result
Run Code Online (Sandbox Code Playgroud)

打印: temp_bar