#!/bin/bash
 
subsequences () {
    local array=("$@")
    local this=${array[0]}
    local tail
    echo "$this"
    [ "${#array[@]}" -eq 1 ] && return
    subsequences "${array[@]:1}" |
    while IFS='' read -r tail; do
        printf '%s && %s\n' "$this" "$tail"
        echo "$tail"
    done
}
 
subsequences fire water air
 
# Works with spaces too
subsequences "one two" "three four"
 
				IyEvYmluL2Jhc2gKCnN1YnNlcXVlbmNlcyAoKSB7CiAgICBsb2NhbCBhcnJheT0oIiRAIikKICAgIGxvY2FsIHRoaXM9JHthcnJheVswXX0KICAgIGxvY2FsIHRhaWwKICAgIGVjaG8gIiR0aGlzIgogICAgWyAiJHsjYXJyYXlbQF19IiAtZXEgMSBdICYmIHJldHVybgogICAgc3Vic2VxdWVuY2VzICIke2FycmF5W0BdOjF9IiB8CiAgICB3aGlsZSBJRlM9JycgcmVhZCAtciB0YWlsOyBkbwogICAgICAgIHByaW50ZiAnJXMgJiYgJXNcbicgIiR0aGlzIiAiJHRhaWwiCiAgICAgICAgZWNobyAiJHRhaWwiCiAgICBkb25lCn0KCnN1YnNlcXVlbmNlcyBmaXJlIHdhdGVyIGFpcgoKIyBXb3JrcyB3aXRoIHNwYWNlcyB0b28Kc3Vic2VxdWVuY2VzICJvbmUgdHdvIiAidGhyZWUgZm91ciIK