Difference between revisions of "Script portability"

From GRASS-Wiki
Jump to: navigation, search
(Created page with "=== Make GRASS shell scripts portable === :::::: Portable shell scripting is something of a black art, since with the evolution and derivation of the UNIX shell, the definiti...")
 
Line 38: Line 38:
 
x=`expr $x + 1`  
 
x=`expr $x + 1`  
 
</source>
 
</source>
 +
 +
 +
== The $(command) expression versus `command` ==
 +
 +
The $(command) may be supported in many modern Bourne shells but for pure Bourne shells use of `command` is favored, although this method tends to lead to confusion when the backquotes contain the characters $, ` and \. In such cases remember to use the character \ to escape these sequences.
 +
  
 
== References ==
 
== References ==
  
 
* [http://www.novell.com/coolsolutions/feature/11232.html Making Scripts Portable]] by Simon Nattrass
 
* [http://www.novell.com/coolsolutions/feature/11232.html Making Scripts Portable]] by Simon Nattrass

Revision as of 05:26, 4 May 2012

Make GRASS shell scripts portable

Portable shell scripting is something of a black art, since with the evolution and derivation of the UNIX shell, the definition of "portable" is perhaps ambiguous.
_Simon__Nattrass_

Guidelines

Conditionals

Conditional with [ ... ] should replaced by __test__

               	         
if [ -f foo.c ] 
then
...
fi

as here:

 
if test -f foo.c
then
...
fi

Arithmetics

Expression with $(( ... ))

 
x=$(($x+1))

are more portable if using __expr__

              
x=`expr $x + 1`


The $(command) expression versus `command`

The $(command) may be supported in many modern Bourne shells but for pure Bourne shells use of `command` is favored, although this method tends to lead to confusion when the backquotes contain the characters $, ` and \. In such cases remember to use the character \ to escape these sequences.


References