unquote
Description:
Unquotes a string as the shell (/bin/sh) would.
This function only handles quotes; if a string contains file globs, arithmetic operators, variables, backticks, redirections, or other special-to-the-shell features, the result will be different from the result a real shell would produce (the variables, backticks, etc. will be passed through literally instead of being expanded).
This function is guaranteed to succeed if applied to the result of quote. If it fails, it returns null and sets the error.
The quoted_string
need not actually contain quoted or escaped text; unquote simply goes through the
string and unquotes/unescapes anything that the shell would. Both single and double quotes are handled, as are escapes including escaped
newlines.
The return value must be freed with g_free.
Possible errors are in the g_shell_error domain.
Shell quoting rules are a bit strange. Single quotes preserve the literal string exactly. escape sequences are not allowed; not even `\'` - if you want a `'` in the quoted text, you have to do something like `'foo'\''bar'`. Double quotes allow `$`, ```, `"`, `\`, and newline to be escaped with backslash. Otherwise double quotes preserve things literally.
Example: Unquote a string:
public static int main (string[] args) {
// Output: ``my str``
try {
string str = Shell.unquote ("my str");
print ("%s\n", str);
} catch (ShellError e) {
print ("Error: %s\n", e.message);
}
// Output: ``my str``
try {
string str = Shell.unquote ("'my str'");
print ("%s\n", str);
} catch (ShellError e) {
print ("Error: %s\n", e.message);
}
// Output: ``Error: Unmatched quotation mark in command line or other shell-quoted text``
try {
string str = Shell.unquote ("'my str");
print ("%s\n", str);
} catch (ShellError e) {
print ("Error: %s\n", e.message);
}
return 0;
}
valac --pkg glib-2.0 GLib.Shell.unquote.vala
Parameters:
quoted_string |
shell-quoted string |
Returns:
an unquoted string |