The trick for this is to use eval several times.
curdir=1 curlevel=0 temp='dir_${curdir}_${curlevel}' # Note single quotes! x=$(eval echo $temp) eval $x=$PWD cd /tmp curdir=2 curlevel=4 x=$(eval echo $temp) eval $x=$PWD echo $dir_1_0 echo $dir_2_4
The output of sh -x script :
+ curdir=1 + curlevel=0 + temp='dir_${curdir}_${curlevel}' ++ eval echo 'dir_${curdir}_${curlevel}' +++ echo dir_1_0 + x=dir_1_0 + eval dir_1_0=/Users/jleffler/tmp/soq ++ dir_1_0=/Users/jleffler/tmp/soq + cd /tmp + curdir=2 + curlevel=4 ++ eval echo 'dir_${curdir}_${curlevel}' +++ echo dir_2_4 + x=dir_2_4 + eval dir_2_4=/tmp ++ dir_2_4=/tmp + echo /Users/jleffler/tmp/soq /Users/jleffler/tmp/soq + echo /tmp /tmp
sh script output:
/Users/jleffler/tmp/soq /tmp
Converted to function:
change_dir() { temp='dir_${curdir}_${curlevel}' # Note single quotes! x=$(eval echo $temp) eval $x=$PWD cd $1 } curdir=1 curlevel=0 change_dir /tmp curdir=2 curlevel=4 change_dir $HOME echo $dir_1_0 echo $dir_2_4 pwd
Output:
/Users/jleffler/tmp/soq /tmp /Users/jleffler
The names recorded are the names of the remaining directory, not the one to which you came.
source share