On 07/06/2022 11:27 PM, Chris Schanzle wrote: > Agree with Gordon's other response having specific examples of where it > worked and didn't work would help us help you, but these things can get messy > quickly. > > Since you quoted the tilde path, it is not expanded when assigned to your > array. Take out the quotes to have it expanded at the time of assignment. > If instead you want it expanded later, use eval. > > x="~/.bashrc" > $ echo "$x" $x; ls -l $x > ~/.bashrc ~/.bashrc > ls: cannot access '~/.bashrc': No such file or directory > > $ eval ls -l $x > -rw-r--r-- 1 schanzle mygroup 8720 Mar 4 15:46 /home/schanzle/.bashrc > > $ (ls -l $x) > ls: cannot access '~/.bashrc': No such file or directory > > $ bash -c "ls -l $x" > -rw-r--r-- 1 schanzle mygroup 8720 Mar 4 15:46 /home/schanzle/.bashrc > > > # no quotes = expansion at assignment > $ x=~/.bashrc > $ echo "$x" $x; ls -l $x > /home/schanzle/.bashrc /home/schanzle/.bashrc > -rw-r--r-- 1 schanzle mygroup 8720 Mar 4 15:46 /home/schanzle/.bashrc > > > Hope that helps, > Chris > > On 7/6/22 9:41 PM, H wrote: >> I have run into a bash variable string problem that I think I have nailed >> down to the variable string containing a tilde (~). Not sure if my >> conclusion is correct and could use some help. >> >> To make a long(er) story short, an associative array variable was created: >> >> p[work_path]="~/projects/test/" >> >> and referenced in the following format in the shell script: >> >> "${p[work_path]}" >> >> To my consternation this worked fine in some places but not in others. I >> tried to use the above construct when piping output, as part of a file >> reference when calling psql from the command line and when referencing an >> xslt file with xsltproc. >> >> In some places it worked, in others it did not but when I substituted the >> variable reference above with the path in clear text itself it then worked. >> >> It looks like there are some nuances on variable substitution that I have >> yet to learn, perhaps tied to the use of the tilde since using the variable >> p[work_path]="/home/user/projects/test/" seemed to work in all places. >> >> Pointers welcome! >> >> _______________________________________________ >> CentOS mailing list >> CentOS@centos.org >> https://lists.centos.org/mailman/listinfo/centos
Thank you, I read up on bash expansion of tilde and realized substituting $HOME for ~ would be the best and would avoid any other unforeseen complications. Once I had done that the script worked. _______________________________________________ CentOS mailing list CentOS@centos.org https://lists.centos.org/mailman/listinfo/centos