

# --first
# --all

# Inner function
___x_cmd_docker_id___grep(){
    local kw="$1"
    {
        local line
        read -r line
        while read -r line; do
            case "$line" in
                *"$kw"*)
                    printf "%s\n" "${line%%,*}"
                    return
                ;;
            esac
        done
    }
    return 1
}

___x_cmd_docker_id(){
    local mode=one
    while [ $# -gt 0 ]; do
        case "$1" in
            --prefix)       prefix="$2";    shift 2;;
            --all)          mode=all;       shift  ;;
            *)              break ;;
        esac
    done

    [ $# -gt 0 ] || N=docker M="Provide keyword -> $1" log:ret:64
    local kw="$1"; shift

    [ -n "$kw" ] || N=docker M="The keyword provided is empty." log:ret:64

    {
        [ -z "$prefix" ] || set -- --prefix "$prefix"
        ___x_cmd docker ps -a "$@" --csv
    } | {
        local count=0
        local line
        local name

        read -r line
        while read -r line; do
            name="${line#*,}"
            name="${name%%,*}"  # just name
            case "$name" in
                *$kw*)
                    count="$((count + 1))"
                    # TODO: check only name id, label
                    printf "%s\n" "${line%%,*}";
                    [ "$mode" = all ] || return 0 ;;
            esac
        done

        [ $count -gt 0 ]
    }
}

___x_cmd_docker_id_(){
    x_="$(___x_cmd_docker_id "$@")"
}
