How does the dir variable resembles the asterisk (
*
) coming a little bit after it in the same line (how is the Bash interpreter knows that$dir
[iteratively] represents each directory inside/var/www/html/
?
É como o Bash shell globs funciona / se comporta, mas você está enganado sobre uma coisa: dir/*
é um glob que inclui todos os arquivos dentro de dir
, não apenas todos os diretórios: em um ambiente POSIX, os diretórios são um tipo de arquivo , mas neste caso apenas diretórios são relevantes para o for loop e o par subsequente pushd
- popd
.
How does the
pushd
-popd
sequence(?) works here? I understand it to "if you are inside$dir
which resembles each iteration of the for loop, do stuff".
pushd
e popd
são um par de ferramentas que funcionam com uma estrutura de dados conhecida como "pilha". Imagine um dispensador com mola, como um dispensador Pez .
Se você empurrar um item em uma pilha, você está armazenando-o para uso posterior, como empurrar uma 'pílula' para o topo do dispensador Pez.
Se você pop um item de uma pilha, você está tirando para uso ou referência. Isso remove da pilha.
Veja este comportamento para ver um exemplo simples de como pushd
e popd
work:
$ pwd
/home/myuser
$ pushd /etc
/etc ~
$ pwd
/etc
$ pushd /usr/local
/usr/local /etc ~
$ pwd
/usr/local
$ popd
/etc ~
$ pwd
/etc
$ popd
~
$ pwd
/home/myuser
Seu for
loop basicamente funciona dizendo if Eu posso empurrar este diretório para a pilha de diretórios, então isso significa primeiramente que o diretório agora existe, e em segundo lugar que esse diretório é o atual trabalho diretório. Ele continuará fazendo o trabalho e, em seguida, popd
para voltar para onde quer que tenha sido antes e, em seguida, executará a próxima iteração do loop.