Cascas POSIX (por exemplo, bash, dash, ksh,…) aceitam uma construção ${var%suffix} que
pode ser usado para remover a parte traseira do valor de um
variável. Por exemplo, se path="sub/file.txt" , então ${path%.txt}
expande para sub/file .
Há uma construção simétrica para remover um prefixo: ${var#prefix} . O prefixo pode ser um padrão. Dobrar o # retira o prefixo correspondente mais longo. Por exemplo, se path=sub/dir/file.txt , então ${path##*/} será expandido para file.txt (e ${path#*/} será expandido para dir/file.txt ). O mesmo vale para sufixos e % .
Então, no seu caso, você poderia escrever isto (note que você não pode combinar o prefixo de decapagem e o sufixo removendo em uma única expansão, pelo menos não apenas com construções POSIX):
for f in sub/*.txt; do
base=${f%.txt}
base=${base##*/}
enscript -b "" -o "$base.ps" "$f"
ps2pdf "$base.ps" "$base.pdf"
done
Alternativamente, o GNU
O comando basename aceita um
segundo argumento opcional, que é a extensão de arquivo a ser removida. Para
Por exemplo, se $f for file.txt , então $(basename $f .txt) se expandirá para
file .
Observe, no entanto, que basename remove todas as informações do caminho, exceto
o último componente, então se você quiser remover apenas a extensão você
tem que colocar isso de volta (veja o
comando dirname ).