-
d=$d/..adiciona/..ao conteúdo atual da variáveld.dcomeça vazio, depois a primeira iteração torna/.., o segundo/../..etc. -
sed 's/^\///'cai o primeiro/, então/../..se torna../..(isso pode ser feito usando uma expansão de parâmetro,d=${d#/}). -
d=..só faz sentido no contexto de sua condição:if [ -z "$d" ]; then d=.. fiIsso garante que, se
destiver vazio nesse ponto, você vá para o diretório pai. (upsem argumento é equivalente acd ...)
Essa abordagem é melhor do que iterativa cd .. porque preserva cd - - a capacidade de retornar ao diretório anterior (da perspectiva do usuário) em uma única etapa.
A função pode ser simplificada:
up() {
local d=..
for ((i = 1; i < ${1:-1}; i++)); do d=$d/..; done
cd $d
}
Isso pressupõe que queremos subir pelo menos um nível e adicionar níveis n - 1 , portanto, não é necessário remover o% principal/ ou verificar se há $d vazia .
Usando o Athena jot (o pacote athena-jot no Debian):
up() { cd $(jot -b .. -s / "${1:-1}"); }
(baseado em um variante sugerido por glenn jackman ).