bash: recorre dos variables de cadena para crear enlaces simbólicos

bash: recorre dos variables de cadena para crear enlaces simbólicos

Logré crear dos variables bash, las cuales son líneas de cadenas.

$oldfilenamesque parece

path/old-filename-1.txt
path/old-filename-2.txt
path/old-filename-3.txt
path/old-filename-4.txt
...

y

$newfilenamesque parece

new-filename-1.txt
new-filename-2.txt
new-filename-3.txt
new-filename-4.txt
...

y me gustaría generar enlaces simbólicos en mi directorio usando estas dos variables.

Ambas variables tienen la misma longitud. Espero hacer algo como esto:

for x in $oldfilenames; y in $newfilenames; do 
  ln -s $x $y
done

Creo que esa no es la sintaxis correcta y no puedo hacer que funcione.

Respuesta1

No estoy seguro de que las cadenas delimitadas por nuevas líneas sean una buena manera de manejar secuencias de nombres de archivos (es posible que desee considerar el uso de matrices).

Sin embargo, dado que eso es lo que tienes, una combinación deaquí cuerdascon la readcapacidad incorporada para leer descriptores de archivos numerados podría funcionar:

while IFS= read -r -u3 x; IFS= read -r -u4 y; do 
  echo ln -s "$x" "$y"
done 3<<<"$oldfilenames" 4<<<"$newfilenames"

[ echoSe incluye con fines de prueba].

Respuesta2

No hay ninguna construcción incorporada para iterar sobre dos listas al mismo tiempo. Una fordeclaración itera sobre una lista.

Si estás usando un shell con matrices,no almacene listas como cadenas delimitadas por nueva línea, use matrices en su lugar.

Si oldfilenamesy newfilenamesson matrices, puede iterar sobre el índice de la matriz.

for ((i=0; i<${#oldfilenames[@]}; i++)); do
  x=${oldfilenames[$i]}; y=${newfilenames[$i]}; …
done

Si necesita tener cadenas delimitadas por nuevas líneas, puede eliminar la primera línea, una línea a la vez.

nl='
'
oldfilenames=${oldfilenames%"$nl"}
while [ -n "$oldfilenames" ]; do
  x=${oldfilenames%%"$nl"*}; y=${newfilenames%%"$nl"*}
  oldfilenames=${oldfilenames#*"$nl"}; newfilenames=${newfilenames#*"$nl"};
done

información relacionada