Recibo del usuario una determinada ruta de archivo absoluta, y quiero crear una variable que será una cadena que no incluirá solo los PRIMEROS dos componentes de la ruta del archivo, pero sin imprimirla ni nada.
Por ejemplo, la ruta absoluta podría ser:
/home/myusername/folder1/folder2/folder3
Y se guarda en "target_path", y quiero que "mydir" sea solo:
/folder1/folder2/folder3
Intenté usar el comando de corte de diferentes maneras pero sin éxito.
command-line
bash
environment-variables
La vida de Pi
fuente
fuente
/home/username
el$HOME
directorio real del usuario que invoca? Si es así usted podría quitar simplemente usandomydir="${target_path#$HOME}"
CreoRespuestas:
Usando la manipulación de cadenas de bash :
Entonces, la cadena que desea sería (agregando la barra inclinada):
Para una variable
a
,${a#foo}
eliminará la coincidencia de cadena más cortafoo
desde el inicio dea
. Por lo tanto, eliminamos la cadena más corta que contiene tres/
(incluida la barra diagonal en la ruta), para eliminar los dos primeros componentes de la ruta absoluta.fuente
Aquí hay un ejemplo usando
cut
Si necesita la guía
/
, puede agregarla| sed 's/^/\//'
al final de su línea.Lo necesita
-f4-
porque-d '/'
le dicecut
que lo use/
como delimitador entre campos. Entonces, el primer campo viene antes del primer delimitador, en este caso el primer campo está vacío. Asífolder1
es el 4to campo y-f4-
le dice a cut que use todos los campos del 4to en adelante.fuente
Puede usar la expansión de parámetros bash de esta manera:
Después de este:
da:
Funciona al eliminar la primera coincidencia del patrón
/*/*/
de su variable target_path, mediante el uso de la${target_path#pattern}
sintaxis de expansión de parámetros de shell. Desafortunadamente, esto elimina el primer/
carácter, razón por la cual ese carácter debe incluirse explícitamente al configurar la variable myvar.Advertencia: debe verificar que su variable target_path contenga algunos caracteres y que sea más larga que dos segmentos de ruta antes de utilizar este método. Por ejemplo si
target_path=/home/username/
, entoncesmyvar=/
. Esto podría ser peligroso para su sistema si está ejecutando algo asírm -rf "$myvar"*
. ¡No intentes esto!fuente