#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
Este script bash me dá erro de substituição incorreta no Ubuntu. Qualquer ajuda será muito apreciada.
string
bash
ubuntu
substitution
Arindam Choudhury
fonte
fonte
cut
?cut -d_ -f1,2 <<< "$jobname"
ecut -d_ -f3 <<< "$jobname"
faça-osh script.sh
, recebe um erro de "Substituição incorreta".Respostas:
O shell padrão (
/bin/sh
) no Ubuntu aponta paradash
, nãobash
.Portanto, se você
chmod +x your_script_file.sh
e depois executá-lo com./your_script_file.sh
, ou se executá-lobash your_script_file.sh
, deve funcionar bem.sh your_script_file.sh
Executá- lo com não funcionará porque a linha hashbang será ignorada e o script será interpretado pordash
, o que não suporta essa sintaxe de substituição de cadeia.fonte
/bin/bash
para que sua resposta não se encaixe ?! Onde você lê que ele está usando/bin/sh
oush script.sh
?bad substitution
e só estou tentando coletar informações, mas esta pergunta não ajuda porque tem poucas informações.Eu tive o mesmo problema. Verifique se o seu script não possui
no topo do seu script. Em vez disso, você deve adicionar
fonte
#!bin/bash
esh script.sh
, ainda me deu a mensagem de erro. Então./script.sh
funciona.#!/bin/bash
também corrigirá a substituição incorreta .#!
linha é usada somente quando você executa seu script diretamente. Se você usarsh script.sh
a linha é completamente ignorada.Para outras pessoas que chegam aqui, essa mensagem exata também será exibida ao usar a sintaxe da variável env para comandos, por exemplo, em
${which sh}
vez da correta$(which sh)
fonte
Sua sintaxe de script é válida e válida.
Possíveis causas da falha:
Você
bash
não é realmente bash, masksh
ou algum outro shell que não entende a substituição de parâmetros do bash. Porque seu script parece bem e funciona com o bash. Façals -l /bin/bash
e verifique se realmente é o bash e não está vinculado a nenhum outro shell.Se você possui o bash no seu sistema, pode estar executando o script da maneira errada, como:
ksh script.sh
oush script.sh
(e seu shell padrão não é o bash). Desde que você tem shebang adequado, se você tem bash./script.sh
oubash ./script.sh
deve ficar bem.fonte
/bin/bash
(não/bin/sh
) alguma vez estivesse vinculado a um shell diferente.Tente executar o script explicitamente usando o comando bash, em vez de apenas executá-lo como executável.
fonte
sh script
ebash script
... minha sugestão :)Além disso, verifique se você não possui uma string vazia para a primeira linha do seu script.
ou seja, verifique se
#!/bin/bash
é a primeira linha do seu script.fonte
Não é relevante para o seu exemplo, mas você também pode obter o
Bad substitution
erro no Bash para qualquer sintaxe de substituição que o Bash não reconheça. Isto pode ser:bash -c '${x }'
bash -c '${x;-}'
bash -c '${x@Q}'
antes do Bash 4.4.Se você tiver várias substituições na mesma expressão, o Bash pode não ser muito útil para identificar a expressão problemática. Por exemplo:
fonte
Bad substitution
então pensei em incluir o caso em que nos deparamos. (Estava@Q
no Bash 4.3 escondido em uma longa expressão de várias linhas.)@Q
embash-4.4
.Ambos - bash ou dash - funcionam, mas a sintaxe precisa ser:
fonte
Parece que "+ x" causa problemas:
fonte
Eu estava adicionando um cifrão duas vezes em uma expressão com chaves no bash:
ao invés de
fonte
Eu descobri que esse problema é causado pela resposta marcada ou você tem uma linha ou espaço antes da declaração do bash
fonte