programas - ¿Reemplazar el carácter de nueva línea en la variable bash?
script linux ejemplos (1)
Estoy tratando de entender el script "cdargs-bash.sh" con los paquetes cdargs. Y tengo una pregunta acerca de 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; ¿Desea eliminar el carácter de nueva línea en $dir
o quizás por alguna otra razón? Estoy empezando a aprender bash scripting y he buscado en Google un tiempo pero no pude encontrar ningún uso como este.
Sí, tienes razón, elimina el carácter de nueva línea. Creo que el propósito de la prueba es asegurarse de que $dir
no contenga varias líneas.
Alternativamente, puede eliminar /newline
por
${dir/$''/n''/}
Esto no requiere dos líneas, así que creo que se ve mejor.