
EDITAR: Cambió el requisito de nombres de variables calculados dinámicamente, ya que no los necesito estrictamente para mi caso de uso, y se proporcionó una solución que funciona para mí.
Probablemente esto sea imposible de hacer, pero aquí va:
Tengo un script bash que realiza algunas conversiones de formato y tipo de archivo en un archivo de entrada que es ASCII xyz (latitud, longitud, profundidad) triple y crea varios tipos de archivos de salida. Estoy tratando de evitar tener que discutir los nombres de los archivos de salida cada vez que escribo un script similar a este; Supongo que estoy intentando encontrar una manera de calcular los nombres de los archivos de salida.globalmenteen mi sistema dado cualquier nombre de archivo de entrada, ya sea ' export
'inging los sufijos del nombre de archivo de salida en bashrc, o en algún otro archivo que se obtiene en mis scripts.
Así, por ejemplo, en un script típico crearía nombres de archivos de salida dinámicamente a partir del archivo de entrada proporcionado en la línea de comando:
INPUT=$1
INPUT_SUFFIX=`echo $INPUT | cut -d. -f2`
INPUT_BASE=$(basename $INPUT .$INPUT_SUFFIX)
OUTPUT_TEXT="${INPUT_BASE}txt"
OUTPUT_TIFF="${INPUT_BASE}tif"
OUTPUT_GRID="${INPUT_BASE}grd"
#...etc, plus other output formats
Estoy tratando de encontrar una manera de evitar tener que hacer estas tediosas definiciones de nombres de archivos de salida en cada script. Sé que podría simplemente copiar y pegar el código cada vez, pero sería más eficiente definir cómo se construirán los nombres de los archivos de salida una vez y globalmente en todo mi sistema.
Entonces encualquierscript que escribo, para cualquier valor de $1
, una variable como $OUTPUT_TIFF
lo haríayase calculará dinámicamente a partir de la entrada y se evaluará como "${1}.tif".
Respuesta1
Una manera fácil deSECOes escribir el código común en un archivo normal y obtener el archivo cada vez que lo necesite. En fiestaincluso puedes pasar argumentos. Sin embargo, esto es "bajo demanda", no "calculado dinámicamente"; es decir, si $1
cambia por cualquier motivo, deberá volver a buscar la fuente para actualizar sus variables.