versiones guia español descargar actualizar string bash ubuntu substitution

string - guia - bash: Mala sustitución



qgis manual (7)

#!/bin/bash jobname="job_201312161447_0003" jobname_pre=${jobname:0:16} jobname_post=${jobname:17}

Este script bash me da un error de sustitución Bad en Ubuntu. Cualquier ayuda será muy apreciada.


Ambos, bash o dash, funcionan, pero la sintaxis debe ser:

FILENAME=/my/complex/path/name.ext NEWNAME=${FILENAME%ext}new


El shell por defecto ( /bin/sh ) bajo Ubuntu apunta a dash , no a bash .

me@pc:~$ readlink -f $(which sh) /bin/dash

Entonces, si chmod +x your_script_file.sh y luego lo ejecuta con ./your_script_file.sh , o si lo ejecuta con bash your_script_file.sh , debería funcionar bien.

Ejecutarlo con sh your_script_file.sh no funcionará porque se ignorará la línea hashbang y la secuencia de comandos se interpretará por dash , que no admite esa sintaxis de sustitución de cadenas.


Intente ejecutar el script explícitamente usando el comando bash en lugar de simplemente ejecutarlo como ejecutable.


La sintaxis de tu script es válida y buena.

Posibles causas de la falla:

  1. Tu bash no es realmente bash sino ksh o algún otro intérprete de comandos que no comprende la sustitución de parámetros de bash. Porque tu script se ve bien y funciona con bash. Haga ls -l /bin/bash y compruebe que es realmente bash y que no está vinculado a ningún otro shell.

  2. Si tiene bash en su sistema, entonces puede estar ejecutando su script de la manera incorrecta como: ksh script.sh o sh script.sh (y su shell predeterminado no es bash). Como tiene shebang adecuado, si tiene bash ./script.sh o bash ./script.sh debería estar bien.


Para otros que lleguen aquí, este mensaje exacto también aparecerá cuando se usa la sintaxis de la variable env para los comandos, por ejemplo ${which sh} lugar de los $(which sh) correctos $(which sh)


Yo tuve el mismo problema. Asegúrate de que tu script no tenga

#!/bin/sh

en la parte superior de tu script En cambio, deberías agregar

#!/bin/bash


Además, asegúrese de no tener una cadena vacía para la primera línea de su script.

es decir, asegúrese de que #! / bin / bash sea la primera línea de su script.