I have a bash script for my RaspberryPi (running Raspbian) that is supposed to take multiple file names as parameter(s) and play one after the other (using omxplayer
). The basic structure is this:
#!/bin/bash
for f in ${*}
do
echo "${f}";
done;
Now I have problems when the input filenames contain spaces; in particular, the behaviour seems to be inconsistent. Assume we have two files test a b
and test d e
in the same directory. Running above script with different parameters yields this:
$ ./test test\ a\ b
test
a
b
$ ./test "test a b"
test
a
b
$ ./test test\ a*
test
a
b
$ ./test "test a*"
test
a*
But, curiously:
./test "test*"
test a b
test d e
Obviously, only this last variant provides the intended output. It is cumbersome to use, however, especially if you want to watch a single file (tab-completion will fill in the whole name) or if one of the folder names in the file's path contains spaces.
What can I do differently in the shellscript so that it will always behave as intended? In particular, both of
$./test test*
$./test test\ a\ b test\ d\ e
should produce the same output
test a b
test d e
so the script can be used easily using normal tab-completion.
test
is not a good name for an example program, because there is/usr/bin/test
; It's relevant because people learn from seeing examples; And in this special case, it would be a lot more readable with a different name too.