Filename Expansion
Objectives
- FIXME
Now that we have our files renamed with the prefix “original-”, let’s reverse course and take off the prefix. By placing the variable’s name within curly braces, e.g., ${filename}, you gain new powers—like the ability to modify the variable’s value when you extract it.
for filename in *.dat
do
echo mv $filename ${filename#original-}
done
The # notation removes text from the beginning of a variable’s value. So this loop would print:
mv original-basilisk.dat basilisk.dat
mv original-unicorn.dat unicorn.dat
And using % instead of # removes text from the end:
for filename in *.dat
do
echo mv $filename ${filename%.dat}
done
prints:
mv original-basilisk.dat original-basilisk
mv original-unicorn.dat original-unicorn
Avoid confusing variable names and text
Sometimes you may want to add something to the end of a variable’s value. For example, you might add “backup” to the end of your files’ names:
for filename in *.dat do echo mv $filenamebackup doneOops: each time through the loop the shell looks for a variable named
filenamebackup, which doesn’t exist. To avoid confusing our$filenamevariable with the text “backup”, we can use curly braces:for filename in *.dat do echo mv $filename ${filename}backup donewhich prints:
mv original-basilisk.dat original-basilisk.datbackup mv original-unicorn.dat original-unicorn.datbackup
Key Points
- FIXME