$ touch {a,b,c,"white space"}.sample
$ ls *.sample
a.sample c.sample
b.sample white space.sample
$ for SAMPLE in *.sample; do mv -v "$SAMPLE" "${SAMPLE%.sample}"; done
a.sample -> a
b.sample -> b
c.sample -> c
white space.sample -> white space
Editar : veja também ${parameter#word}
, que exclui word
da frente de parameter
:
$ FILENAME=140909_stats_report.txt
$ echo "${FILENAME#140909_}"
stats_report.txt
Eu me lembro de qual delas eu preciso das posições das chaves #
e %
no meu teclado (Reino Unido): #
é deixado de %
então corresponde à esquerda. Antes eu percebi que tinha que checar a página de manual todo tempo: ~)
Essas expansões também oferecem suporte a curingas de shell:
$ echo "${FILENAME%.*}"
140909_stats_report
Os formulários #
e %
correspondem à menor expansão de word
. Você pode usar ##
ou %%
para a correspondência mais longa. Por exemplo:
$ FILENAME=140909_stats_report.txt
$ echo "${FILENAME#*_}" # match as little as possible
stats_report.txt
$ echo "${FILENAME##*_}" # match as much as possible
report.txt
Vale a pena lidar com essas expansões. Há vários outros, incluindo suporte de regex (um pouco irritadiço), substrings e maneiras de definir padrões ou obter comprimentos variáveis. Man bash , claro.