Difference between revisions of "What does "unary operator expected" mean"
From Linuxintro
imported>ThorstenStaerk |
|||
(14 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" ] | |
− | if [ $name = " | + | 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: | |
− | + | <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 | ||
+ | </pre> | ||
+ | |||
+ | = See also = | ||
+ | * [[troubleshooting]] | ||
+ | * [[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