Re: [CentOS] Special characters in bash strings

2022-07-06 Thread Jon LaBadie

On Wed, Jul 06, 2022 at 09:41:14PM -0400, 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]}"


Is there a reason you desire "delayed" evaluation of the tilde?

If no, then evaluate the tilde in the above assignment by not
quoting it.

If yes, then where tilde evaluation IS wanted, you will likely
need to do a second round of shell evaluation of the command
line by using the keyword "eval".

$ x="~/foo"
$ y=~"/foo" # y contains the tilde evaluated version

$ echo "$x $y"
~/foo /home/jon/foo

$ echo $x $y# quotes don't matter here
~/foo /home/jon/foo

$ eval echo "$x $y"
/home/jon/foo /home/jon/foo


Use of eval could introduce other unexpected/unwanted
evaluations and is discouraged unless required.

--
Jon H. LaBadie  j...@labadie.us
___
CentOS mailing list
CentOS@centos.org
https://lists.centos.org/mailman/listinfo/centos


Re: [CentOS] Special characters in bash strings

2022-07-06 Thread Gordon Messmer

On 7/6/22 18:41, H wrote:

To my consternation this worked fine in some places but not in others.



It might be easier to explain if you had an example of where it worked.  
The bash man page has a section titled "EXPANSION" that details the 
order in which expansions happen.  Since tilde expansion happens before 
variable expansion, the case you're discussing shouldn't work in any 
context (other than an eval or equivalent).


___
CentOS mailing list
CentOS@centos.org
https://lists.centos.org/mailman/listinfo/centos


[CentOS] Special characters in bash strings

2022-07-06 Thread H
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