#!/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 incorrecto en Ubuntu. Cualquier ayuda será muy apreciada.
string
bash
ubuntu
substitution
Arindam Choudhury
fuente
fuente
cut
?cut -d_ -f1,2 <<< "$jobname"
ycut -d_ -f3 <<< "$jobname"
hacerlosh script.sh
, aparece un error de "Mala sustitución".Respuestas:
El shell predeterminado (
/bin/sh
) en Ubuntu apunta adash
, nobash
.Entonces, si usted
chmod +x your_script_file.sh
y luego lo ejecuta./your_script_file.sh
, o si lo ejecutabash your_script_file.sh
, debería funcionar bien.Ejecutarlo
sh your_script_file.sh
no funcionará porque la línea hashbang se ignorará y el script será interpretado pordash
, lo que no admite esa sintaxis de sustitución de cadenas.fuente
/bin/bash
para que su respuesta no encaje? ¿Dónde lees que está usando/bin/sh
osh script.sh
?bad substitution
y solo estoy tratando de recopilar información, pero esta pregunta no ayuda porque tiene muy poca información.Yo tuve el mismo problema. Asegúrese de que su guión no tenga
en la parte superior de tu guión. En cambio, deberías agregar
fuente
#!bin/bash
ysh script.sh
, todavía me dio el mensaje de error. Entonces./script.sh
funciona.#!/bin/bash
también reparará la sustitución incorrecta .#!
línea se usa solo cuando ejecuta su script directamente. Si usash script.sh
la línea se ignora por completo.Para otros que lleguen aquí, este mensaje exacto también aparecerá cuando se use la sintaxis de la variable env para los comandos, por ejemplo, en
${which sh}
lugar de la correcta$(which sh)
fuente
La sintaxis de su script es válida bash y buena.
Posibles causas de la falla:
Your
bash
no es realmente bash peroksh
o algún otro shell que no comprende la sustitución de parámetros de bash. Porque tu script se ve bien y funciona con bash. Hagals -l /bin/bash
y compruebe que sea realmente bash y no esté vinculado a ningún otro shell.Si tiene bash en su sistema, entonces puede estar ejecutando su script de manera incorrecta como:
ksh script.sh
osh script.sh
(y su shell predeterminado no es bash). Ya que tienes un shebang adecuado, si tienes bash./script.sh
obash ./script.sh
deberías estar bien.fuente
/bin/bash
(no/bin/sh
) alguna vez estuvieran vinculados a un shell diferente.Intente ejecutar el script explícitamente usando el comando bash en lugar de solo ejecutarlo como ejecutable.
fuente
sh script
ybash script
... mi sugerencia :)Además, asegúrese de no tener una cadena vacía para la primera línea de su secuencia de comandos.
es decir, asegúrese de que
#!/bin/bash
sea la primera línea de su secuencia de comandos.fuente
No es relevante para su ejemplo, pero también puede obtener el
Bad substitution
error en Bash para cualquier sintaxis de sustitución que Bash no reconozca. Esto podría ser:bash -c '${x }'
bash -c '${x;-}'
bash -c '${x@Q}'
antes de Bash 4.4.Si tiene múltiples sustituciones en la misma expresión, Bash puede no ser muy útil para identificar la expresión problemática. P.ej:
fuente
Bad substitution
así que pensé en incluir el caso con el que nos encontramos. (Estaba@Q
en Bash 4.3 escondiéndose en una larga expresión de varias líneas.)@Q
ser agregado enbash-4.4
.Ambos, bash o dash, funcionan, pero la sintaxis debe ser:
fuente
Parece que "+ x" causa problemas:
fuente
Estaba agregando un signo de dólar dos veces en una expresión con llaves en bash:
en vez de
fuente
He descubierto que este problema es causado por la respuesta marcada o tiene una línea o espacio antes de la declaración de bash
fuente