Not sure how to ask this question. I want concatenate strings and variable recursively into new variable. For example:
infile01=/dir/subfolder/file01.txt
infile02=/dir/subfolder/file02.txt
infile03=/dir/subfolder/file03.txt
for i in {01..03}
do
u=${"infile"$i}
echo $u
done
Whatever you are trying to do is a bad programming practice.
I would highly recommend using arrays instead which is pretty much straightforward:
infile[1]="/dir/subfolder/file01.txt"
infile[2]="/dir/subfolder/file02.txt"
infile[3]="/dir/subfolder/file03.txt"
for i in {1..3}
do
echo "${infile[$i]}"
done
You can use eval to acheive it, but using it is a security risk and hence a bad programming practice.
infile01=/dir/subfolder/file01.txt
infile02=/dir/subfolder/file02.txt
infile03=/dir/subfolder/file03.txt
for i in {01..03}
do
u=$( printf "infile%02d" "$i" )
eval echo \$"$u"
done
Hi Yoda!
Another question not about the concatenation but related to the array index when it is "08". The problem is with 8 & 9 that caused problem as
"bash: 08: value too great for base (error token is "08"). "
I am aware this is related to octal for 01~07 but not 08~09.. etc. I want this leading 0 for 1~9 for the filenames to be nicely aligned. What is the trick to include a leading zero to the number as array index, if any? Thanks a lot!
#!/bin/bash
typeset -A infile
infile["01"]="/dir/subfolder/file01.txt"
infile["02"]="/dir/subfolder/file02.txt"
infile["03"]="/dir/subfolder/file03.txt"
infile["04"]="/dir/subfolder/file04.txt"
infile["05"]="/dir/subfolder/file05.txt"
infile["06"]="/dir/subfolder/file06.txt"
infile["07"]="/dir/subfolder/file07.txt"
infile["08"]="/dir/subfolder/file08.txt"
infile["09"]="/dir/subfolder/file09.txt"
for i in {01..09}
do
echo ${infile["$i"]}
done