I expect the value to be incremented but get the same value of h
i.e. 9
. When I tried this directly in terminal it's working fine but after writing in shell file value remains same. Please tell me how to increment using this method only. i=$((i 1))
is also working.
h=9
echo $h
((h=h 1))
echo $h
((h=h 8))
echo $h
CodePudding user response:
This is a difference between sh
and bash
.
The POSIX sh standard only requires h=$(( h 1 ))
to work. It does not require (( h = h 1 ))
to work.
Bash, however, supports (( h = h 1 ))
. If you write a script using this syntax, you need to run it in bash -- not in sh -- to operate correctly.
That means you should run bash yourscript
instead of sh yourscript
, and start the script with a shebang such as #!/usr/bin/env bash
to tell it to use bash as its interpreter when run as an executable.
CodePudding user response:
Simply copy pasted your code and got the below mentioned error
-bash-4.2$ cat test1.sh
#!/bin/bash
h=9
echo $h
((h=h 1))
((h=h 8)) echo $h
-bash-4.2$ ./test1.sh
9
./test1.sh: line 9: syntax error near unexpected token `echo'
./test1.sh: line 9: `((h=h 8)) echo $h'
-bash-4.2$
That is because, your syntax is not the correct way to add two values. Have a read here for more details.
Added the required echo
check and used correct syntax, and it gave the below result
-bash-4.2$ cat test1.sh
#!/bin/bash
h=9
echo $h
h=$(($h 1))
echo $h
h=$(($h 8))
echo $h
-bash-4.2$ ./test1.sh
9
10
18
-bash-4.2$
You can use expr
too.
h=`expr $h 1`