Re: Shell function & variable usage.
On Fri, Dec 06, 2024 at 18:46:06 -0500, eben@gmx.us wrote:
> You could do something
> overengineered like defining an array "excludepatterns" for patterns, and
> then doing something like
>
> rsync \
> $(for pattern in ${excludepatterns[@]} ; do
> echo -- "--exclude '$pattern'"
> done)
>
> Modulo mistakes, of course.
This definitely has mistakes. You're expanding each of the patterns
based on the files in the current working directory.
hobbit:~$ exclusions=( '*.mp3' '*.mp4' '*.wav' )
hobbit:~$ echo *.mp3
christmas-peebs.mp3 inmexico.mp3 Kristie_and_John_-_Bobby_McGee.mp3
hobbit:~$ for p in ${exclusions[@]}; do echo -- "--exclude '$p'"; done
-- --exclude 'christmas-peebs.mp3'
-- --exclude 'inmexico.mp3'
-- --exclude 'Kristie_and_John_-_Bobby_McGee.mp3'
-- --exclude '*.mp4'
-- --exclude '*.wav'
That's not what you want. (You're also writing a literal -- which is
not wanted.)
As I wrote in the previous message, you can generate the second array
using a single command that doesn't perform pathname expansions:
hobbit:~$ opts=( "${exclusions[@]/#/--exclude=}" )
hobbit:~$ declare -p opts
declare -a opts=([0]="--exclude=*.mp3" [1]="--exclude=*.mp4" [2]="--exclude=*.wav")
Reply to: