The man page for Bash says, regarding the
-c stringIf the
-coption is present, then commands are read from
string. If there are arguments after the string, they are assigned to the positional parameters, starting with
So given that description, I would think something like this ought to work:
bash -c "echo arg 0: $0, arg 1: $1" arg1
but the output just shows the following, so it looks like the arguments after the
-c string are not being assigned to the positional parameters.
arg 0: -bash, arg 1:
I am running a fairly ancient Bash (on Fedora 4):
[root@dd42 trunk]# bash --version GNU bash, version 3.00.16(1)-release (i386-redhat-linux-gnu) Copyright (C) 2004 Free Software Foundation, Inc.
I am really trying to execute a bit of a shell script with arguments. I thought
-c looked very promising, hence the issue above. I wondered about using eval, but I don't think I can pass arguments to the stuff that follows eval. I'm open to other suggestions as well.
You need to use single quotes to prevent interpolation happening in your calling shell.
$ bash -c 'echo arg 0: $0, arg 1: $1' arg1 arg2 arg 0: arg1, arg 1: arg2
Or escape the variables in your double-quoted string. Which to use might depend on exactly what you want to put in your snippet of code.
$0' and '
$1' in your string is replaced with a variable #0 and #1 respectively.
bash -c "echo arg 0: \$0, arg 1: \$1" arg0 arg1
In this code
$ of both are escape so base see it as a string
$ and not get replaced.
The result of this command is:
arg 0: arg0, arg 1: arg1
Hope this helps.