File: gawk.info, Node: Shell Quoting, Next: Isnumeric Function, Prev: Readfile Function, Up: General Functions 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 }