Concatenación y adición de variables de entorno

Concatenación y adición de variables de entorno

Si tengo una variable de entorno:

$foo=/my/path/one:/my/path/two

¿Cómo puedo configurar:

$bar=${foo}/bin

dónde:

$bar=/my/path/one/bin:/my/path/two/bin

?

Hacer lo que he hecho anteriormente solo hace (no falta /bin en la primera ruta):

$bar=/my/path/one/:/my/path/two/bin

Puedo configurar esto manualmente o iterarlo en una lista, pero parecen complicados sin ningún motivo. ¿Existe una forma inteligente y sencilla de hacer esto?

Respuesta1

¿Entiendo bien? Le gustaría tener esto:

foo=$(echo $foo | sed -e 's@:\|$@/bin&@g'); echo $foo

?

Respuesta2

No es el más robusto, pero quizás el más simple es simplemente reemplazar todos los dos puntos usando /bin:la expansión de parámetros:

foo=/my/path/one:/my/path/two:/my/path/three

noo=${foo//:/\/bin:}/bin

echo $noo
/my/path/one/bin:/my/path/two/bin:/my/path/three/bin

Explicación:

La sintaxis ${foo}le permite realizar muchos tipos de búsqueda y reemplazo en la variable. En este caso utilizamos la coincidencia de patrones, con los patrones separados por barras. Normalmente podrías hacer algo como esto:

$(foo/findme/replace}

que buscará la cadena findmey $foola reemplazará con replace.

Para intercambiar los dos puntos con x, puede buscar con ${foo/:/x/}pero para reemplazar todos y no solo el primero, coloque dos barras al principio. Para usar una barra diagonal en el reemplazo, debes escapar de ella con una barra invertida\/

En conjunto, eso nos da el patrón usado anteriormente (se agregaron espacios para mayor claridad, pero lo romperían en la vida real):

          <find>   <replace>
${foo  //   :   /   \/bin:  }

El resto es historia.

información relacionada