#!/bin/bash

prune_path_rootside() {
    # Desc: Prunes a path from the root-side to a specified prune level.
    # Input: arg1  str  path
    #        arg2  int  prune level (0-indexed)
    # Depends: GNU sed 4.8
    # Version: 0.0.1
    local path="$1";
    local prune_level="$2";

    # Check for absolute or relative path
    if [[ "$path" =~ ^/ ]]; then
        flag_root=true;
        # Remove initial /
        path="$(echo "$path" | sed -e 's:^/::' )";
    else
        flag_root=false;
    fi;
    
    # Save path as array with `/` as element delimiter
    local IFS='/';
    read -ra parts <<< "$path";

    # Assemble pruned path from prune_level
    local pruned_path="";
    for (( i=prune_level; i<${#parts[@]}; i++ )); do
        pruned_path+="${parts[i]}/";
    done;

    # Trim trailing `/` delimiter
    pruned_path=$(echo "$pruned_path" | sed 's:/*$::');

    # Restore initial / if appropriate
    if [[ "$flag_root" == "true" ]] && [[ "$prune_level" -eq 0 ]]; then
        pruned_path=/"$pruned_path";
    fi;

    # Output pruned path
    echo "$pruned_path";
    #declare -p path prune_level parts pruned_path && printf "========\n"; # debug
    return 0;
}; # prune path rootside to int specified level

printf "========Test 1========\n";
prune_path_rootside "foo/bar/baz" 0;
prune_path_rootside "foo/bar/baz" 1;
prune_path_rootside "foo/bar/baz" 2;
prune_path_rootside "foo/bar/baz" 3;
printf "========Test 2========\n";
prune_path_rootside "/foo/bar/baz" 0;
prune_path_rootside "/foo/bar/baz" 1;
prune_path_rootside "/foo/bar/baz" 2;
prune_path_rootside "/foo/bar/baz" 3;