Você pode lidar com o link simbólico com uma variável simples:
symlink_flag=
if [[ $symlink_boolean == y ]]; then
symlink_flag=-L
fi
find $symlink_flag "$location" -maxdepth "$depth" -readable ...
Observe que $symlink_flag
não está listado aqui, portanto, se estiver vazio, ele desaparecerá. O valor que ele contém não contém nenhum caractere curinga ou caractere IFS
padrão, portanto, não citá-lo não causa nenhum dano. As outras variáveis devem ser citadas, desde, e. o local pode conter espaços em branco.
Para a parte de profundidade, sua melhor aposta é construir a linha de comando em uma matriz:
arguments=()
if [[ $symlink_boolean == y ]]; then
arguments+=(-L)
fi
arguments+=("$location")
if [[ $depth_boolean == y ]]; then
arguments+=(-maxdepth "$depth")
fi
find "${arguments[@]}" -readable -iname ...
Você pode colocar as opções nonchanging na linha de comando find
como acima, ou apenas anexá-las incondicionalmente à matriz e apenas executar find "${arguments[@]}"
.
Veja também:
- Como podemos executar um comando armazenado em uma variável?
- Divisão de palavras em BashGuide
- BashFAQ / 050 ou "Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham!"
Tecnicamente, você também pode fazer o que você propõe com a substituição de comandos:
find $(if [[ $symlink_boolean == y ]]; then printf %s -L; fi) "$location"
$(if [[ $depth_boolean == y ]]; then echo -maxdepth $maxdepth; fi) ...
Embora, em geral, isso não seja ideal, a única maneira de produzir várias palavras a partir da substituição de comando é separá-las e dividi-las, mas isso não funciona bem se houver palavras dentro que contenham espaços em branco . -maxdepth N
deve funcionar, no entanto.
Como nota lateral, você pode condensar um pouco as condições usando, por exemplo, %código%. Verificaria se a variável começa com [[ $symlink_boolean == [Yy]* ]]
ou Y
. (Se você não se importa com coisas como y
também sendo valores verdadeiros.) Use a correspondência de regex YEAAHHH
ou [[ $symlink_boolean =~ ^(y|yes)$ ]]
para permitir apenas os dois valores.