¿Cómo dividir una cadena en Rust?

La mejor opción es usar split(), que divide la cadena aplicando diferentes criterios de separación, por ejemplo, indicando una cadena o un carácter de separación:

cadena1.split("separador");
cadena2.split('/');

O separando por caracteres numéricos:

cadena3.split(char::is_numeric);

Por espacios en blanco:

let subcadenas = "Dos subcadenas".split_whitespace();

O usando expresiones regulares:

let subcadenas = Regex::new(r"\s").unwrap().split("Uno Dos Tres");

Otra opción es usar lines() para separar por saltos de línea:

let subcadenas = "Línea 1\nLínea 2\nLínea 3".lines();

En todos los casos devuelve un iterador que puede recorrerse en bucle:

for s in subcadenas {
    println!("{}", s);
}

O se puede pasar a un vector usando collect():

let vector = subcadenas.collect::<Vec<&str>>();
// O también...
let vector: Vec<&str> = subcadenas.collect();

Estos son todos los ejemplos en Rust Playground:

En Bash, hacer que el directorio del script sea el directorio de trabajo

Usar el siguiente código:

#!/bin/bash
cd $(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)

Aunque en otras shells UNIX/OS X/Linux podría funcionar con:

cd $(cd -P -- "$(dirname -- "$0")" && pwd -P)

En Bash se usa ${BASH_SOURCE[0]} en lugar de $0 para que la ruta siga siendo correcta cuando se invoque desde otro fuente (source/.).

El guión doble (-) marca el final de las opciones del comando, de esta forma no dará error al procesar archivos que contengan guiones u otros caracteres especiales.

Si es un entorno controlado normalmente funcionará con el siguiente código más sencillo:

#!/bin/bash
cd "$(dirname "$0")"

También se propone otra opción usando Parameter Expansions:

#!/bin/bash
cd "${0%/*}"

pero parece que no funciona si se ejecuta desde el mismo directorio. Nunca lo he usado.