Esa es una de las razones por las que necesita citar sus variables:
echo "${str:$i:1}"
De lo contrario, bash expande la variable y en este caso hace globbing antes de imprimir. También es mejor citar el parámetro al script (en caso de que tenga un nombre de archivo coincidente):
sh lash_ch.sh 'abcde*'
Consulte también el orden de las expansiones en el manual de referencia de bash . Las variables se expanden antes de la expansión del nombre de archivo.
Para obtener el último carácter, debe usarlo -1
como índice, ya que los índices negativos cuentan desde el final de la cadena:
echo "${str: -1}"
El espacio después de los dos puntos ( :
) es REQUERIDO.
Este enfoque no funcionará sin el espacio.
"${1: -1}"
es suficiente.echo "${str:$((${#str}-1)):1}"
. Esto le permite también variar los caracteres finales devueltos. Esto funciona para mí en bash v4.1.0 (1)"${1:-1}
hacePor @perreal, citar variables es importante, pero como leí esta publicación como 5 veces antes de encontrar un enfoque más simple para la pregunta en cuestión en los comentarios ...
Salida:
/
Salida:
*
Gracias a todos los que participaron en esto arriba; ¡He agregado apropiadamente +1 en todo el hilo!
fuente
${std: -1}
, sin el espacio esto no funcionará. Me encontré con esto y descubrí que${std:~0}
también funciona (con o sin espacio). Sin embargo, no estoy seguro de si este es un comportamiento documentado, no me he molestado en buscarlo..sh
script cuando se intenta asignar el carácter recuperado a una variable. Por ejemplo,declare LAST=$(echo "${str: -1}")
esto dará como resultado la desagradable barra roja que muestra un error de sintaxis que comienza en:${str:0-1}
Sé que este es un hilo muy antiguo, pero nadie mencionó cuál para mí es la respuesta más limpia:
Tenga en cuenta que
-n
es solo para que el eco no incluya una nueva línea al final.fuente
otra solución usando el script awk:
último 1 carácter:
últimos 5 caracteres:
fuente
cat file | awk '{print substr($0,length,1)}'
¡Gracias!Linea sola:
Ahora:
fuente
echo "${str: -1}"
es suficiente (tenga en cuenta el espacio entre:
y-
).$((...))
.Cada respuesta hasta ahora implica que la palabra "shell" en la pregunta equivale a Bash.
Así es como se podría hacer eso en un shell Bourne estándar:
fuente
echo -n
según lo propuesto por user5394399 evita problemas cuando$str
contiene caracteres de formato especial.-n
cambio es un bashismo. No funcionará en el shell Bourne estándar como guión, etc., que fue el punto de mi respuesta.printf "%s" "$str" | ...
:-).Tratar:
Por ejemplo:
fuente
es un buen enfoque
fuente