例如:
s1="my_foo" s2="not_my_bar"
期望的结果将是my_o.我怎么在bash中这样做?
我的解决方案使用fold将字符串分成每行一个字符,排序列表,comm比较两个字符串,最后tr删除新行字符
comm -12 <(fold -w1 <<< $s1 | sort -u) <(fold -w1 <<< $s2 | sort -u) | tr -d '\n'
或者,这是一个纯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
打印:temp_bar