Qual é o objetivo do operador "nulo" em um script BASH? Entendo que ele é usado como um espaço reservado após um if
comando quando você não tem nada a dizer, mas precisa de um comando para permitir que o programa seja executado corretamente. Mas qual é o uso geral para isso? Quando você o usaria? Quando faz sentido usá-lo?
13
Respostas:
Às vezes, é útil permitir que ocorram efeitos colaterais de expansões de parâmetros.
Por exemplo, definindo um valor padrão
fonte
:
comandos e parâmetros no manual do bash.${name:="John Doe"}
será expandida, fazendo com que a atribuição ocorra porque é lida como um argumento para:. Sem o: o shell tentará executar "John Doe" como um comando, ou o valor,$name
se já estiver definidoVocê também pode usá-lo para loops infinitos:
fonte
while true
seja mais legível, porque (a) usa menos pontuação e (b) é mais semelhante às linguagens derivadas de C.Você pode usá-lo para criar um arquivo sem executar um programa:
Isso é infinitesimalmente mais rápido que
touch /path/to/file
(já que não requer a execução dotouch
programa) e pode ser marginalmente mais portátil do que simplesmenteo que parece funcionar em muitos sistemas. Da mesma forma, ele pode ser usado para verificar se você tem acesso de gravação a um arquivo :
embora isso também possa geralmente ser feito sem o
:
. Ressalvas:(Veja a pergunta vinculada por motivos pelos quais isso é mais confiável do que
if [ -w /path/to/file ]
.)fonte
No caminho de volta, no Unix V6 e Thompson Shell, o
:
foi realmente usado como parte dagoto
declaração. De acordo com o manual , ele apareceu originalmente na versão 3 do Unix:Atualmente,
bash
ele é usado como um operador não operacional, retornando sucesso. De fato, se você olhar para o código fonte , verá que ambostrue
e:
usam a mesma funçãoint colon_builtin()
, embaixo. Não existe:
um comando não integrado e,/bin/true
na verdade , é um comando bastante grande para o que ele faz.:
pode ser usado em qualquer lugartrue
, por exemplocommand_that_can_fail || true
, embora isso possa confundir não especialistas. Leia mais sobre isso aqui .fonte
Você pode usá-lo no teste positivo de um
if
comando quando quiser apenas fazer algo do lado negativo. Por exemplo:Sem o
:
bash, geraria um erro de sintaxe.Este é um exemplo simplificado demais. Geralmente, você usaria essa técnica na codificação preliminar quando ainda não escreveu esse segmento de código e precisa apenas de algo que não gere um erro.
fonte
if pgrep firefox >/dev/null ; then : ; else echo "Firefox not running"; fi
, mostraria erro apenas se o Firefox não estivesse em execução. Em outras palavras, quando você precisa fazer algo apenas quando o comando tem um erro. De certa forma isso é equivalente apgrep firefox || echo "Firefox not running"
, embora mais legível e permite mais comandosAcabei de usá-lo em um script com comandos SSH para evitar erros no script.
Nesse caso, quero ver se um usuário pode se conectar a um conjunto de servidores. Se a conexão estiver OK, o host remoto ecoará OK. Se a conexão falhar, o SSH responderá com o erro. No entanto, quero que meu script saia com 0 e não com o valor do comando SSH, se ele falhar. Então, basicamente eu intercepto o erro SSH ORing
||
com o comando nulo:
. Se parece com isso:Dessa forma, recebo a saída do SSH, mas não o código de erro:
fonte