Make multiple copies of files with a shell script
bash, linux, shell
Solution
Unfortunately it doesn't work like that. Bash performs brace expansion before parameter expansion, so your brace will be expanded before `$NUMBER` is evaluated. See also the Bash Pitfall #33, which explains the issue.
One way to do this, using your code, would be:
for i in $(eval echo {2..$NUMBER})
do
# ...
done
Or, even shorter:
for i in $(seq 2 $NUMBER)
# ...
(thanks, Glenn Jackman!)
Note that typically, variables should be quoted. This is especially important for file names. What if your file is called `foo bar`? Then your `cp -f` would copy `foo` and `bar` since the arguments are split by whitespace.
So, do something like this:
cp -f "$FILENAME" "${FILENAME%%.*}_${i}.csv"
While it might not matter if your files don't contain whitespace, quoting variables is something you should do automatically to prevent any surprises in the future.
Problem
I am trying to write a small shell script that makes the multiple copies of a file. I am able to take the file name as input but not the number of copies. Here is what I wrote. But I am unable to pass the `NUMBER` variable to for loop. ``` echo -n "Enter filename: " read FILENAME echo -n "Number of copies to be made: " read NUMBER for i in {2..$NUMBER} do cp -f $FILENAME ${FILENAME%%.*}"_"$i.csv done ```