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