Zsh: verifica a existência do arquivo antes de expandir

1

Na expansão do parâmetro Zsh, tenho:

"${test_var:-"${HOME}/test"}"

mas aqui eu quero verificar se ${HOME}/test existe ou não, se não existir, então test_var expande para " " (uma string de espaço).

Existe uma solução inline para isso?

    
por Tuyen Pham 27.11.2018 / 04:20

1 resposta

2
echo ${test_var:-~/test(N)}

chega perto. Adicionando um (N) (e aqui como estamos no contexto de lista), esse ~/test(N) se torna um glob e, por causa disso, qualificador N glob, se não houver nenhuma entrada de diretório test em $HOME ( ~ ), então a glob expande-se para nada.

Isso é diferente do que você está perguntando, pois ele se expande para nada, em vez de um argumento de espaço único.

Para isso, você ainda pode fazer isso nas etapas:

f=(~/test(N)); echo ${test_var:-${f:-' '}}

Você também pode usar a substituição de comandos, embora isso seja um pouco trapaceiro:

echo ${test_var:-"${$(printf %s ~/test(N)):-' '}"}

Ou:

echo ${test_var:-"$((){<<<${1-' '}} ~/test(N))"}
    
por 02.12.2018 / 16:59