Eu tenho o seguinte script bash:
while [ $loop == "true" ]
do
//do stuff
done
mas diz erro em [.
Além disso, isso é executado como um daemon, quando o argumento de parada é passado para o script ... o loop deve. Eu estou supondo que definir $ loop como false terminará automaticamente o loop.
Respostas:
A melhor maneira de digitar isso seria:
Leia a seção "Elaborando o comando test" na seguinte URL:
http://wiki.bash-hackers.org/syntax/quoting
fonte
O Sr. Vazquez-Abrams está certo. Isso não é nada a ver com aspas fazendo coisas que são já cordas em cordas, ou alguma idéia equivocada de que
=
embash
's built-in[
comando é outra coisa senão uma comparação de cadeia. (Leia o parágrafo 6.4 do Manual do Usuário do Bash, pessoal!) Tudo tem a ver com o que acontece com os campos vazios após a divisão de campos transformar palavras em campos.Se a variável do shell
loop
estiver vazia ou nula, será$loop
expandida para um campo vazio. Após a divisão do campo, os campos vazios são descartados. Observe que a divisão de campos e a verificação de campos vazios precedem a remoção da cotação. Então,"$loop"
expande para o campo""
, que não está vazio e, portanto, não é removido. Após a remoção da cotação, é então um campo vazio, que se torna um argumento vazio para o comando.O
expande para quatro campos[
comando requer que seu=
operador tenha dois operandos, anterior e posterior. Qualquer outra coisa é um erro de sintaxe. Como um campo vazio é removido, a sequência de palavras[
=
true
]
quando o
[
comando precisar de cinco para estar sintaticamente correto:[
=
true
]
Obviamente, a cadeia vazia não é igual à cadeia de quatro caracteres
true
e o status de saída do comando é diferente de zero.Novamente, tudo isso está no Manual do Usuário do Bash, em §3.5 e §3.5.7. O manual é seu amigo.
fonte