Aqui está uma função:
_testPathAndUnset() { for d in "$@"; do [ -d "${!d}" ] || unset "$d"; done; }
Aqui está em uso. Para começar, temos dois diretórios:
$ ls -d */
a1/ a2/
Definimos quatro variáveis de shell que podem ou não avaliar os diretórios:
$ one=a1; two=a2; three=a3; four=a4
Agora, execute nossa função em relação a essas quatro variáveis:
$ _testPathAndUnset one two three four
E observe que apenas duas variáveis permanecem definidas:
$ echo "one=$one two=$two three=$three four=$four"
one=a1 two=a2 three= four=
Detalhes:
-
for d in "$@"
Isso faz um loop sobre cada argumento na linha de comando.
-
[ -d "${!d}" ] || unset "$d"
Aqui
d
refere-se ao nome de uma variável.${!d}
refere-se ao valor da variável denominadad
. Isso testa se o valor da variável denominadad
é um diretório. Se não estiver, o teste[
será avaliado como falso e a cláusulaunset "$d"
será executada.