script programas paso pasar parametros manejo hacer español ejemplos como comando cadenas bash newline substitution

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.