Difference between revisions of "What does "unary operator expected" mean"
From Linuxintro
imported>ThorstenStaerk |
|||
(11 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 | + | 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: |
<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> | ||
Line 61: | Line 29: | ||
* [[troubleshooting]] | * [[troubleshooting]] | ||
* [[error messages]] | * [[error messages]] | ||
+ | * [[shell scripting tutorial]] |
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