GNU/Linux >> Tutoriales Linux >  >> Linux

Recorriendo los elementos de una variable de ruta en Bash

Puede usar la expansión de parámetros de sustitución de patrones de Bash para completar su variable de bucle. Por ejemplo:

MANPATH=/usr/lib:/usr/sfw/lib:/usr/info

# Replace colons with spaces to create list.
for path in ${MANPATH//:/ }; do
    echo "$path"
done

Nota:No incluya la expansión de sustitución entre comillas. Desea que los valores expandidos de MANPATH sean interpretados por el bucle for como palabras separadas, en lugar de como una sola cadena.


Puede configurar el separador de campo interno:

( IFS=:
  for p in $MANPATH; do
      echo "$p"
  done
)

Usé un subshell para que el cambio en IFS no se refleje en mi shell actual.


La forma canónica de hacer esto, en Bash, es usar el read incorporado apropiadamente:

IFS=: read -r -d '' -a path_array < <(printf '%s:\0' "$MANPATH")

Esta es la única solución sólida:hará exactamente lo que desea:dividir la cadena en el delimitador : y estar seguro con respecto a espacios, saltos de línea y caracteres globales como * , [ ] , etc. (a diferencia de las otras respuestas:todas están rotas).

Después de este comando, tendrás una matriz path_array , y puedes repetirlo:

for p in "${path_array[@]}"; do
    printf '%s\n' "$p"
done

Linux
  1. Personalización del shell Bash

  2. ¿Recorrer archivos con espacios en los nombres?

  3. El Bash'?

  4. ¿Vista completa de dónde se establece la variable de ruta en Bash?

  5. ¿Es posible que la finalización de Bash pase por las alternativas?

Variable de exportación de bash

¿Cómo puedo contar la cantidad de caracteres en una variable Bash?

Código de salida de asignación de variables a sustitución de comandos en Bash

Alcance variable para scripts y funciones bash shell en el script

¿Cuál es el significado de un signo de dólar doble en bash/Makefile?

¿Implicaciones de seguridad del uso de rutas relativas en la variable ambiental PATH?