问题
If I have a variable containing an unescaped dollar sign, is there any way I can echo the entire contents of the variable?
For example something calls a script:
./script.sh "test1$test2"
and then if I want to use the parameter it gets "truncated" like so:
echo ${1}
test1
Of course single-quoting the varaible name doesn't help. I can't figure out how to quote it so that I can at least escape the dollar sign myself once the script recieves the parameter.
回答1:
The variable is replaced before the script is run.
./script.sh 'test1$test2'
回答2:
The problem is that script receives "test1" in the first place and it cannot possibly know that there was a reference to an empty (undeclared) variable. You have to escape the $
before passing it to the script, like this:
./script.sh "test1\$test2"
Or use single quotes '
like this:
./script.sh 'test1$test2'
In which case bash will not expand variables from that parameter string.
回答3:
by using single quotes , meta characters like $
will retain its literal value. If double quotes are used, variable names will get interpolated.
回答4:
As Ignacio told you, the variable is replaced, so your scripts gets ./script.sh test1
as values for $0
and $1
.
But even in the case you had used literal quotes to pass the argument, you shoudl always quote "$1"
in your echo "${1}"
. This is a good practice.
来源:https://stackoverflow.com/questions/3923623/how-to-echo-a-variable-containing-an-unescaped-dollar-sign-in-bash