gawk: Shell Quoting
10.2.9 Quoting Strings to Pass to the Shell
-------------------------------------------
Michael Brennan offers the following programming pattern, which he uses
frequently:
#! /bin/sh
awkp='
...
'
INPUT_PROGRAM | awk "$awkp" | /bin/sh
For example, a program of his named 'flac-edit' has this form:
$ flac-edit -song="Whoope! That's Great" file.flac
It generates the following output, which is to be piped to the shell
('/bin/sh'):
chmod +w file.flac
metaflac --remove-tag=TITLE file.flac
LANG=en_US.88591 metaflac --set-tag=TITLE='Whoope! That'"'"'s Great' file.flac
chmod -w file.flac
Note the need for shell quoting. The function 'shell_quote()' does
it. 'SINGLE' is the one-character string '"'"' and 'QSINGLE' is the
three-character string '"\"'\""':
# shell_quote --- quote an argument for passing to the shell
function shell_quote(s, # parameter
SINGLE, QSINGLE, i, X, n, ret) # locals
{
if (s == "")
return "\"\""
SINGLE = "\x27" # single quote
QSINGLE = "\"\x27\""
n = split(s, X, SINGLE)
ret = SINGLE X[1] SINGLE
for (i = 2; i <= n; i++)
ret = ret QSINGLE SINGLE X[i] SINGLE
return ret
}