What do I put in wrapper.sh
, if I want this:
wrapper.sh "hello world" arg2 '' "this ' thing"
to output:
Now please run:
other-command "hello world" arg2 '' "this ' thing"
I realize and am fine with that the original quotation is lost and the output perhaps will be quoted differently, as long as other-command
gets the correct parameters when the command is cut'n'pasted to the shell.
I'm aware of "$@"
which works well for calling other programs, but not for echoing valid bash to STDOUT
as far as I can tell.
This looks pretty nice but requires Perl and String::ShellQuote
(which I'd like to avoid):
$ perl -MString::ShellQuote -E 'say shell_quote @ARGV' other-command "hello world" arg2 '' "this ' thing"
other-command 'hello world' arg2 '' 'this '\'' thing'
This doesn't work - notice how the zero-length arg is missing:
$ perl -E 'say join(" ", map { quotemeta $_ } @ARGV)' other-command "hello world" arg2 '' "this ' thing"
other\-command hello\ world arg2 this\ \'\ thing
again, I'd like to avoid using Perl or Python...
bash [filename] runs the commands saved in a file. $@ refers to all of a shell script's command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument, etc. Place variables in quotes if the values might have spaces in them.
The echo command writes text to standard output (stdout). The syntax of using the echo command is pretty straightforward: echo [OPTIONS] STRING... Some common usages of the echo command are piping shell variable to other commands, writing text to stdout in a shell script, and redirecting text to a file.
A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an '! ' appearing in double quotes is escaped using a backslash. The backslash preceding the '!
You can use the @Q
parameter transformation.
$ set -- "hello world" arg2 '' 'this " thing'
$ echo other-command "${@@Q}"
other-command 'hello world' 'arg2' '' 'this " thing'
If you intend the output to be re-eval
ulated, then you need to printf "%q"
. You script could look like:
echo Now please run:
echo "other-command$(printf " %q" "$@")"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With