Como não faço muito scripts de shell, fiquei um pouco surpreso ao ler a documentaçãogit submodule
e vi a sintaxe que eles usavam nesta documentação:
Um retorno diferente de zero do comando em qualquer submódulo faz com que o processamento seja finalizado. Isso pode ser substituído, adicionando
|| :
ao final do comando.
Eu tive que procurar que || :
era uma abreviação para forçar um comando a sair com sucesso. Sempre que eu tinha que fazer um comando sair com sucesso, eu costumava || true
. É || :
considerado mais idiomático?
||:
(sem espaço) também é válido no bash. Faz a mesma coisa que|| :
ou|| true
.Respostas:
true
não foi construído no shell Bourne.:
sempre foi (era a maneira de inserir comentários antes de#
ser introduzido).Isso, e porque é mais curto para tipo é provavelmente a principal razão as pessoas preferem
:
maistrue
.Observe outra diferença nos shells POSIX (pois
bash
, apenas no modo POSIX): enquantotrue
é um built-in regular (nem precisa ser construído),:
é um built-in especial . Isso tem algumas implicações, a maioria das quais é improvável que tenha algum impacto nesse caso específico:Se um
:
comando falhar, inclusive devido a um redirecionamento com falha, isso fará com que o shell seja encerrado. Na prática, isso provavelmente não fará diferença, a menos que você passe redirecionamentos para:
in
var=value :
,var
permanece definido comovalue
após:
retornos, não no caso detrue
:Além disso, note que as
|| true
obras em conchas dorc
ecsh
famílias, mas não|| :
(mas não para cancelarset -e
emcsh
).|| :
não é o mesmo que:
. Significa ou é executado de:
outra forma (ou seja, se o pipeline anterior falhar).Faria com que o shell para sair por causa de
set -e
efalse
tem um status de saída diferente de zero (falha). Oset -e
efeito será cancelado se o comando que retorna um status de saída diferente de zero for usado como uma condição, como em:false && :
somente cancelaset -e
.false || :
cancelaset -e
e define o status de saída para,0
portanto, é mais idiomático dizer que queremos ignorar um código de saída com falha do comando. A maioria argumentaria que|| true
é mais legível (transmite a intenção mais claramente).fonte
&& :
é brilhante, existem documentos ou leituras adicionais sobre isso? Google está aquém de mim tentando encontrar este tipo de palavras-chave ...Geralmente, no bash, o cólon
:
etrue
é equivalente.Eu acho que é baseado no contexto .
Se você deseja a
return value
, ou acondition
é sempre verdadeiro, use atrue
palavra-chave, isso tornará seu código mais claro e permitirá que os espectadores saibam que você deseja enfatizar o valor verdadeiro , ou seja:ou
E se você não quiser fazer nada , ou
NOP
com casca, use dois pontos:
ou
fonte
A maioria dessas respostas falha ao abordar o uso mais comum de
:
.Primeiro, essa discussão não está relacionada a nenhum shell que não seja um derivado Bourne shell (
sh
). Dito isto, todas as conchas derivadas de Bourne veemtrue
e:
são a mesma coisa. Os programadores costumavam ser incentivados a usar, em:
vez detrue
, porque:
sempre é um componente interno, enquanto costumava haver casos em quetrue
nem sempre era um componente interno.:
tem dois usos. Não é sinônimo#
, mas tem uma função diferente. Ao depurar seu script em aset -x
, as linhas#
usadas são descartadas pelo analisador e são totalmente ignoradas, enquanto as linhas com:
são analisadas e avaliadas. Isso é realmente útil na depuração, pois-x
nessas linhas são mostrados e seu valor após a avaliação é exibido. É como colocarprint
instruções no seu código que são exibidas apenas no-x
modo. Tenha cuidado com os valores após o:
código, pois eles são reais e os efeitos colaterais podem afetar seu programa.fonte