#!/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"
