I have a variable, e.g. a'b
, containing a single quote which I need to replace by two single quotes before writing it to a file: a''b
.
The following bash code used to get the job done for me …
line="a'b"
echo "${line//\'/\'\'}" > out.txt
… until today when I discovered diverging outputs depending on the version of bash being used:
- GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu):
a''b
- GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu):
a\'\'b
I tried to modify the line above in numerous ways but was unable to have it produce the same output a''b
in both bash shells.
I ended up using a combination of echo
and sed
instead,
echo "$(echo $line | sed "s/'/''/g")" > out.txt
but I am still wondering if the job can be gotten done with a more concise pure bash expression. Can it?
Best Answer
One of the changes between bash-4.3-alpha, and the previous version, bash-4.2-release:
Input:
Output: