So does Bash first run through the whole script to find variables?
Não. Como você mesmo descobriu no seu exemplo, os scripts Bash são executados de cima para baixo.
Uma boa prática é definir todas as variáveis que você precisa no topo do seu script.
Eu comecei a aprender scripts Bash e estou usando o tutorial de script Bash
Lá diz
Before Bash interprets (or runs) every line of our script it first checks to see if any variable names are present. For every variable it has identified, it replaces the variable name with its value. Then it runs that line of code and begins the process again on the next line.
O Bash primeiro percorre todo o script para encontrar variáveis? Eu não tenho certeza se isso é o que o autor tentou dizer, mas se sim, eu acho que não está correto?
quando executo:
#!/bin/bash
echo "hello $USERR"
USERR=John
Eu recebo hello como resultado.
Se eu correr:
#!/bin/bash
USERR=John
echo "hello $USERR"
eu recebo hello John como resultado.
So does Bash first run through the whole script to find variables?
Não. Como você mesmo descobriu no seu exemplo, os scripts Bash são executados de cima para baixo.
Uma boa prática é definir todas as variáveis que você precisa no topo do seu script.
Essa é uma maneira muito desleixada de dizer que o shell procura por expansões, como por exemplo variáveis (mas também substituições de comandos, etc.).
O texto poderia ser interpretado para indicar que o shell lê todo o script e procura variáveis em todas as linhas antes da execução. Isso não é assim. Ele processa o comando de script por comando (um comando pode abranger várias linhas).
O shell bash faz o seguinte com cada comando antes de executá-lo:
Tags bash