Eu tenho um problema que é resolvido com esta respostahttps://superuser.com/a/508761
Agora preciso expandi-lo para fazer outras coisas, mas primeiro preciso entender melhor como funciona antes de modificá-lo. Aqui está o script em questão:
#!/bin/bash
(( $# != 2 )) && exit 1
for f in *; do
newf="${f//$1/$2}"
if [[ $f != $newf ]]; then
mv "$f" "$newf"
fi
done
O que (( $# != 2 )) && exit 1
faz? Tive pouca sorte em encontrar explicações on-line: descobri o que é cada componente, mas não o que a linha inteira faz no script como um todo. A resposta não explicou essa linha. O pôster esteve online pela última vez há mais de 2 anos e eu não queria revelar uma pergunta de 5 anos, então aqui estou.
Responder1
É um operador de controle
Debater cara:
Os operadores de controle && e || denotam listas AND e listas OR, respectivamente. Uma lista AND tem o formatoAoperador de controleé
command1 && command2
command2 é executado se, e somente se, command1 retornar um status de saída zero. [..corte..] O status de retorno das listas AND e OR é o status de saída do último comando executado na lista.
Um token que executa uma função de controle. É um dos seguintes símbolos: || & && ; ;; ( ) |
Portanto, neste caso, não leia &&
como um operador booleano. Então agora você sabe quando exit 1
é executado – somente em caso de sucesso do comando anterior (se o status de saída for zero).
Veja issoresposta de falha no servidorparaexplicação de &&
em 3 contextos diferentes no Bash.Útil para aprender distinções entre eles.
Responder2
Ele sai do script nessa linha se não houver exatamente dois argumentos passados para o script.
$#
é o número de argumentos passados ao chamar o script, análogo aoargc
C(( $# != 2 ))
retorna com um código truey (0
) se o número de argumentos não for igual a2
&&
executa o lado direito somente se o lado esquerdo sair com um código verdadeiro. O que significa que o lado direito será executado se o número de argumentos não for 2.exit 1
sai do script com o código de saída falsey de1
. Isso anula o script neste momento e informa ao chamador que houve um erro.