¿Cómo obtener el carácter en una posición dada de una cadena en el script de shell?
shell
shell-script
Tom Brito
fuente
fuente

echo ${var: -2:1}zshymksh.La alternativa a la expansión de parámetros es
expr substrPor ejemplo:
fuente
substrno está incluido en el expr de FreeBSD, NetBSD u OS X. Esta no es una solución portátil.substroriginalmente no es una extensión GNU. La implementación originalexprde PWB Unix vino a finales de los 70 y teníasubstr(pero no:).cut -cSi la variable no contiene nuevas líneas, puede hacer:
salidas:
awk substres otra alternativa POSIX que funciona incluso si la variable tiene nuevas líneas:salidas:
printf '%s\n'es para evitar problemas con los caracteres de escape: /programming//a/40423558/895245 por ejemplo:salidas
\como se esperaba.Ver también: /programming/1405611/extracting-first-two-characters-of-a-string-shell-scripting
Probado en Ubuntu 19.04.
fuente
printf '%s' "$myvar" | cut -c2no es POSIX ya que la salida deprintfno es texto a menos que$myvartermine en un carácter de nueva línea. De lo contrario, se supone que la variable no contiene caracteres de nueva línea, ya quecutcorta cada línea de su entrada.awkuno sería más eficiente y confiable conawk -- 'BEGIN {print substr (ARGV[1], 2, 1)}' "$myvar"cut, eso no funciona para caracteres de varios bytes (lo mismo para mawk u busybox awk)printf 'abc '| cut -c2está mal porque no\n(esto no lo sé) o que el comando fallará si myvar tiene líneas nuevas (estoy de acuerdo)?cutno se especifica si la entrada no es texto (aunquecutse requieren implementaciones para manejar líneas o longitud arbitraria). La salida deprintf abcno es texto, ya que no termina en un carácter de nueva línea. En la práctica, dependiendo de la aplicación, si la tubería que acut -c2, se obtiene ya seab,b<newline>o nada en absoluto. Necesitaríaprintf 'abc\n' | cut -c2obtener un comportamiento especificado por POSIX (que se requiere para la salidab<newline>)Con
zshoyash, usarías:(en
zsh, puedes acortarlo aprintf '%s\n' $text[3]).fuente
Puedes usar el comando de corte. Para obtener la tercera posición:
Consulte este enlace http://www.folkstalk.com/2012/02/cut-command-in-unix-linux-examples.html
( Casos avanzados ) Sin embargo, modificar IFS también es algo bueno, especialmente cuando su entrada puede tener espacios. Solo en ese caso, use el siguiente
fuente
IFSentraría en juego el código que publicaste.