Com zsh
você pode usar a string e
qualificador glob :
for f (./*.pdf(.e_'[[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj'_))
xournal $f &
A string [[ ! -f $REPLY:r.xoj ]] || REPLY=$REPLY:r.xoj
é executada como código shell. REPLY
contém o valor do argumento atual. Se não houver nenhum arquivo .xoj
correspondente para o arquivo .pdf
atual, então [[ ! -f $REPLY:r.xoj ]]
retornará true
e nada acontecerá ( REPLY
permanecerá inalterado).
Se houver um arquivo .xoj
correspondente para o arquivo .pdf
atual, [[ ! -f $REPLY:r.xoj ]]
retornará false
e REPLY=$REPLY:r.xoj
será executado, o que substitui (via modificador :r
) a extensão .pdf
do argumento atual com .xoj
.