A resposta mais portátil e mais curta é quase certamente:
${t%?}
Isso funciona no bash, sh, ash, traço, busybox / ash, zsh, ksh, etc.
Funciona usando a expansão de parâmetros shell da velha escola. Especificamente, o %
especifica a remoção do menor sufixo correspondente do parâmetro t
que corresponde ao padrão de glob ?
(ou seja, qualquer caractere).
Consulte "Remover o menor padrão de sufixos" aqui para ver um (muito) mais detalhado explicação e mais fundo. Veja também os documentos para o seu shell (por exemplo: man bash
) em "expansão de parâmetro".
Como observação, se você quiser remover o caractere primeiro , use ${t#?}
, pois #
corresponde da frente da string (prefixo) em vez da parte de trás (sufixo).
Também vale a pena notar que %
e #
têm %%
e ##
versões, que correspondem à versão mais longa do padrão fornecido, em vez do mais curto. No entanto, tanto ${t%%?}
quanto ${t##?}
farão o mesmo que seu operador único (portanto, não inclua o caractere extra inútil). Isso ocorre porque o padrão ?
fornecido corresponde apenas a um único caractere. Misture em *
com alguns caracteres não-curingas e as coisas ficarão mais interessantes com %%
e ##
.
Entender as expansões de parâmetros, ou pelo menos saber sobre sua existência e saber como pesquisá-las, é incrivelmente útil para escrever e decifrar scripts de shell de muitos tipos. As expansões de parâmetro muitas vezes se parecem com o voodoo arcano de shell para muitas pessoas porque ... bem ... elas são voodoo de shell arcano (embora muito bem documentadas se você souber procurar por "expansão de parâmetro"). Definitivamente bom ter no cinto de ferramentas quando você está preso em um shell, no entanto.