#!/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.shy luego lo ejecuta./your_script_file.sh, o si lo ejecutabash your_script_file.sh, debería funcionar bien.Ejecutarlo
sh your_script_file.shno 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/bashpara que su respuesta no encaje? ¿Dónde lees que está usando/bin/shosh script.sh?bad substitutiony 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/bashysh script.sh, todavía me dio el mensaje de error. Entonces./script.shfunciona.#!/bin/bashtambién reparará la sustitución incorrecta .#!línea se usa solo cuando ejecuta su script directamente. Si usash script.shla 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
bashno es realmente bash peroksho 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/bashy 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.shosh script.sh(y su shell predeterminado no es bash). Ya que tienes un shebang adecuado, si tienes bash./script.shobash ./script.shdeberí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 scriptybash 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/bashsea la primera línea de su secuencia de comandos.fuente
No es relevante para su ejemplo, pero también puede obtener el
Bad substitutionerror 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 substitutionasí que pensé en incluir el caso con el que nos encontramos. (Estaba@Qen Bash 4.3 escondiéndose en una larga expresión de varias líneas.)@Qser 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