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
drefere-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.