Utilizando sed en un script de shell.
Tengo una tarea para imprimir el encabezado de un script de shell como opción de ayuda utilizando sed
.
El script de shell (la respuesta correcta del profesor)
#---------------------------------------------------------------------
# Nombre del archivo: <script1.sh>
# Lenguaje: script de bash
# Proyecto: Clase de Programación de Scripts de Shell
# Descripción: xyz
# Autor: iamgroot
#---------------------------------------------------------------------
if [ "$1" == '-h' ] ; then
echo Ayuda:
sed -n '/Nombre del archivo/,/Autor/p' "$0" | sed "s/^#//g"
exit 0
fi
La salida
Ayuda:
Nombre del archivo: <script1.sh>
Lenguaje: script de bash
Proyecto: Clase de Programación de Scripts de Shell
Descripción: xyz
Autor: iamgroot
No entiendo por qué hay un \
antes de -name
y antes de uthor
(fila 10 del script de shell).
Tampoco entiendo por qué hay "$0"
(en la misma fila).
Cualquier ayuda sería apreciada.
davy.ai
La barra invertida
\
antes de-name
yuthor
en la fila 10 del script de shell se utiliza para escapar los caracteres-
yu
, respectivamente. Esto es necesario porque estos caracteres tienen un significado especial en la expresión regular que se está utilizando en el comandosed
. El carácter-
se utiliza para especificar un rango de caracteres, y el carácteru
se utiliza como una forma abreviada de las letras mayúsculas en el alfabeto. Al escapar estos caracteres con una barra invertida, le estamos indicando ased
que los trate como caracteres regulares en lugar de caracteres especiales.El
"$0"
en la misma fila es una forma de encerrar el valor de la variable$0
entre comillas. Esto es necesario en caso de que la ruta del script contenga espacios u otros caracteres especiales. Al encerrarlo entre comillas, le estamos indicando al shell que lo trate como un solo argumento en lugar de dividirlo en argumentos separados. Los caracteres"
son versiones codificadas en HTML de las comillas dobles, que son equivalentes en este contexto.