Difference between revisions of "What does "unary operator expected" mean"
From Linuxintro
imported>ThorstenStaerk |
|||
(8 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
− | + | The bash message | |
unary operator expected | unary operator expected | ||
− | + | means that you do a comparison where one site is empty for example | |
+ | if [ $name = "foo" ] | ||
+ | and $name is empty. Then the bash shell internally replaces $name by an empty string and it will be interpreted as | ||
+ | if [ = "foo" ] | ||
+ | and this is not a valid expression. | ||
− | + | The solution is to quote variable names like this: | |
− | + | if [ "$name" = "foo" ] | |
− | [ | + | Then it will work. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | = | + | = Shell scripting tutorial = |
− | + | Try the tutorial [[BaBE - Bash By Examples]] to avoid this and similar mistakes in the future. | |
− | |||
− | |||
− | |||
− | |||
− | = | + | = Debugging bash scripts = |
− | + | You can also debug the script line-by-line using bash -x. bash -x shows all commands that are being executed, just like [[gdb]] or [[strace]], but for bash scripts: | |
− | |||
− | |||
− | You can also debug the script line-by-line using | ||
<pre> | <pre> | ||
− | + | tweedleburg:~ # bash -x test.sh | |
− | + | + echo 'how is your name? ' | |
− | + | how is your name? | |
− | + | + read name | |
− | |||
− | |||
− | + | + '[' = foo ']' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
test.sh: line 3: [: =: unary operator expected | test.sh: line 3: [: =: unary operator expected | ||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
Latest revision as of 19:15, 24 December 2014
The bash message
unary operator expected
means that you do a comparison where one site is empty for example
if [ $name = "foo" ]
and $name is empty. Then the bash shell internally replaces $name by an empty string and it will be interpreted as
if [ = "foo" ]
and this is not a valid expression.
The solution is to quote variable names like this:
if [ "$name" = "foo" ]
Then it will work.
Shell scripting tutorial
Try the tutorial BaBE - Bash By Examples to avoid this and similar mistakes in the future.
Debugging bash scripts
You can also debug the script line-by-line using bash -x. bash -x shows all commands that are being executed, just like gdb or strace, but for bash scripts:
tweedleburg:~ # bash -x test.sh + echo 'how is your name? ' how is your name? + read name + '[' = foo ']' test.sh: line 3: [: =: unary operator expected