¿Reemplazar el carácter de nueva línea en la variable bash?

Estoy tratando de entender el script "cdargs-bash.sh" con los paquetes cdargs. Y tengo una pregunta sobre la siguiente función:

function _cdargs_get_dir ()
{
local bookmark extrapath
# if there is one exact match (possibly with extra path info after it),
# then just use that match without calling cdargs
if [ -e "$HOME/.cdargs" ]; then
    dir=`/bin/grep "^$1 " "$HOME/.cdargs"`
    if [ -z "$dir" ]; then
        bookmark="${1/\/*/}"
        if [ "$bookmark" != "$1" ]; then
            dir=`/bin/grep "^$bookmark " "$HOME/.cdargs"`
            extrapath=`echo "$1" | /bin/sed 's#^[^/]*/#/#'`
        fi
    fi
    [ -n "$dir" ] && dir=`echo "$dir" | /bin/sed 's/^[^ ]* //'`
fi
if [ -z "$dir" -o "$dir" != "${dir/
/}" ]; then
    # okay, we need cdargs to resolve this one.
    # note: intentionally retain any extra path to add back to selection.
    dir=
    if cdargs --noresolve "${1/\/*/}"; then
        dir=`cat "$HOME/.cdargsresult"`
        /bin/rm -f "$HOME/.cdargsresult";
    fi
fi
if [ -z "$dir" ]; then
    echo "Aborted: no directory selected" >&2
    return 1
fi
[ -n "$extrapath" ] && dir="$dir$extrapath"
if [ ! -d "$dir" ]; then
    echo "Failed: no such directory '$dir'" >&2
    return 2
fi

}

Cuál es el propósito de la prueba:

"$dir" != "${dir/
/}"

Aquí las pruebas abarcan dos líneas; ¿Quiere eliminar el carácter de nueva línea en $dir ¿O quizás por alguna otra razón? Estoy empezando a aprender a usar scripts bash y he buscado en Google un tiempo, pero no pude encontrar ningún uso como este.

preguntado el 28 de agosto de 11 a las 03:08

1 Respuestas

Sí, tienes razón, elimina el carácter de nueva línea. Creo que el propósito de la prueba es asegurarse $dir no contiene varias líneas.

Alternativamente, puede eliminar \newline by

${dir/$'\n'/}

Esto no requiere dos líneas, así que creo que se ve mejor.

respondido 07 mar '17, 15:03

bueno, la sugerencia que das funciona muy bien. Es el $'\n' aquí sustitución de variables? Simplemente no pude entenderlo. - yorua007

Oh lo tengo. Muchas gracias. - yorua007

Esto reemplaza solo las primeras (no todas) apariciones del carácter de nueva línea. - confundir

@confundir ${dir//$'\n'/} reemplazará todas las ocurrencias. - kkpattern

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.