Por favor, explique abaixo a função bash

0

Eu acho esta função online. É criar um diretório e mudar para o diretório.

Mas eu quero saber cada parte disso.

function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; } 
    
por rɑːdʒɑ 10.05.2016 / 17:58

2 respostas

5

Você pode passar uma lista de nomes. Ele irá criar diretórios para cada um deles e, em seguida, digitar o último .

Isso não precisa de eval . Eu escreveria assim:

mkdircd () { mkdir -p "$@" && cd "${!#}"; }

${!#} usa expansão indireta : $# is o número de parâmetros, então ${!#} é o valor do último parâmetro

    
por 10.05.2016 / 18:09
2

mkdir -p "$@" cria todos os diretórios cujos nomes são passados como argumentos ( $@ ).

A opção -p permite criar recursivamente os diretórios se eles estiverem em diretórios que não existem.

eval cd "\"\$$#\"" apenas vai para o último diretório: $# fornece o número de argumentos passados, portanto \$$# dará o último argumento (ou seja, o último nome do diretório que você passou como argumento). Por exemplo, se houver três argumentos, $# é 3 , então eval executará o comando cd "$3" .

O comando deve ter sido eval cd "\"\${$#}\"" . As chaves são necessárias em muitos shells quando há 10 argumentos, porque muitos shells tratam algo como "$10" como o valor do parâmetro 1 seguido pelo caractere 0 e não como o valor do parâmetro 10.

    
por 10.05.2016 / 18:14