Please , in some future versions of bash, could it provide support / help for avoiding "quoting hell", in such situations as :
$ echo " Error: Cannot find file '/missing/file_1'. Error: Cannot find file '/missing/file_2'. " | while read line; do cmd='if [[ '$'"'"$line"$'"'' =~ ^[^'"\\'"']*['"\\'"']([^'"\\'"']+)['"\\'"'][^'"\\'"']*$ ]]; then echo ${BASH_REMATCH[1]}; fi;'; echo "$cmd" | bash -; done See what I have to do to match lines containing a non-empty single-quoted string ? ie. I just want to cut-and-paste such lines from the output of some application, and weed out the empty lines and print the single-quoted string in lines containing them (only!), with a simple bash command. If you replace "echo $cmd | bash -" with 'eval "$cmd"' , it does not work, because the double-quotes which I had painstakingly inserted with '$'"'' get removed somehow by eval - why is this? ie, only if "$line" is empty, does bash evaluate the text: 'if [[ "" = ... ]]; then ...' else, for the lines I want to match, it would evaluate eg. : + eval 'if [[ Error: Cannot find file '\''/missing_file_1'\''.\" =~ ^[^\\\'\'']*[\\\'\'']([\\\'\'']+)[\\\'\''][^\\\'\'']*$ ]]; then echo ${BASH_REMATCH[1]}; fi;' + set +x ( nothing printed - the single quotes are stripped) + eval 'if [[ \"\" =~ ^[^\\\'\'']*[\\\'\'']([\\\'\'']+)[\\\'\''][^\\\'\'']*$ ]]; then echo ${BASH_REMATCH[1]}; fi;' ++ [[ "" =~ ^[^\']*[\']([\']+)[\'][^\']*$ ]] + set +x + I think bash needs some kind of "q/.../'" and 'qq/../' syntax / built-ins, or whatever syntax its author likes, like PERL has, whereby the single quote ("'") or double quote ('"') respectively are totally ignored within '/.../' parameter strings, which should use a different quoting character than '"' or "'" to delineate them. If the author won't develop these, I will & will send a patch. Regards, Jason