bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Inconsistent quote and escape handling in substitution part of param


From: John Kearney
Subject: Re: Inconsistent quote and escape handling in substitution part of parameter expansions.
Date: Tue, 28 Feb 2012 17:54:54 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20120129 Thunderbird/10.0

On 02/28/2012 05:22 PM, Roman Rakus wrote:
> On 02/28/2012 05:10 PM, John Kearney wrote:
>> wrap it with single quotes and globally replace all single quotes
>> in the string with '\''
> single quote and slash have special meaning so they have to be
> escaped, that's it. \'${var//\'/\\\'}\' it is not quoted, so it
> undergoes word splitting. To avoid it quote it in double quotes,
> however it changes how slash and single quote is treated. 
> "'${var//\'/\'}'"
> 
> Wasn't it already discussed on the list?
> 
> RR
> 
It was discussed but not answered in a way that helped.


Look consider this
test=teststring


echo "${test//str/"dddd"}"
test"dddd"ing

echo ${test//str/"dddd"}
testdddding


echo ${test//str/"'"}
test'ing

echo "${test//str/"'"}"
test"'"ing

echo "${test//str/'}"   # hangs


now consider this case

test=test\'string

echo "${test//"'"/"'"}"
test"'"string


the match string and the replace string are exhibiting 2 different
behaviors.



Now I'm not looking foe a workaround, I want to understand it.
Now you say they are treated special what does that mean and how can I
escape that specialness.

Or show me how without using variables
to do this
test=test\'string

[ "${test}" = "${test//"'"/"'"}" ] || exit 999




Note this isn't the answer
[ "${test}" = "${test//'/'}" ] || exit 999









reply via email to

[Prev in Thread] Current Thread [Next in Thread]