shell

RFC: Bash quiz: $1 gleiche Zeichen $2

Auf der Suche nach $1 gleichen Zeichen $2 hatte ich ursprünglich folgenden Code:

ruler () {  # count char
    local i
    for ((i=0;i<$1;i++))
    do
        echo -n "${2:-=}"
    done
}

Daraus ist dann irgendwann folgendes entstanden:

ruler () {  # count char
    local _r="${2:-=}"
    while [ "${#_r}" -lt "$1" ]
    do
        _r="${_r}${_r}"
    done
    _r="${_r//?/${2:-=}}"
    echo "${_r:0:$1}"
}

Oder doch gleich Python:

ruler () {  # count char
    python -c 'import sys;print sys.argv[2] * int(sys.argv[1])' "$1" "${2:-=}"
}

Folgendes wollte leider nicht:

ruler () {  # count char
    seq -f"${2:-=}" "$1"
}

Aber folgendes funktioniert:

ruler () {  # count char
    local t
    printf -v t '%*s' "$1"
    echo "${t// /${2:-=}}"
}

Kennt ihr ggf. einfachere/bessere/effizientere Varianten?

PS: RFC steht hier für „Request for Competition“, um mal für zwischendurch oder beim Radfahren eine kleine Herausforderung für das eigene Hirn zu haben 😉

Written on September 28, 2011