So, i take it, this is because "[" is a shell builtin. (Which it is indeed - i had the wrong impression that "[" is external and "[[" is the builtin, but i learned otherwise through experiment. In fact "[" is a builtin and "[[" is a reserved word, according to my system shell on AIX, a ksh88.)
This seems to be in line with the following analogous lines, where "x" and "$x" can be used interchangeably:
Code:
x=5 ; let x=x+1
x=5 ; let "x = x + 1"
x=5 ; (( x += 1 ))
x=5 ; echo $(( x ))
I wonder how the parsing process of the ksh works so that this is only the case for integers (or - for the shell obviously being the same - strings which evaluate to integers). One would think that variables either get expanded or not, but it would not depend on their content if they are.
bakunin
I haven't dug into the source of any of these shells, but my impression is not that the shell looks at the contents of the variables, but the context of how the variable is used. In an arithmetic evaluation, when a number is expected and a non-numeric string is seen I would guess that it looks for a variable of that name and substitutes it if it works. Note that let expr, (( expr )), $(( expr )), and [ n1 -eq|-ne|-lt|-le|-ge|-gt n2 ] are all arithmetic evaluations.
PS. Even when test and [ are built-ins, they also have to be available as stand alone utilities (so they can be used with things like find dir -exec test expr \;) like other standard utilities.
Last edited by Don Cragun; 06-24-2014 at 06:31 PM..
Reason: Add postscript.
hi all
i m working in a company ...and i have to migrate a C application running on SCO-UNIX to Red hat linux.
can anybody tell me what is the difference between C commands and shell scripting on SCO-UNIX and LINUX.
best regards
harsh (3 Replies)
I am trying to set some environment variables in a shell script which is written in Kshell. I am invoking this script in .profile. The problem is envirnment variables are set within the script but after exiting the script those are gone. I don't have any problem with If I have Kshell as my default... (0 Replies)
Dear All,
What points should i keep in mind while migrating scripts from HP-UX to AIX.
Are there any notes available for this?
cheers,
vishal (1 Reply)
Hi All,
I am currently facing new problem of migrating C(c language) application from AIX machine to Linux machine. We are using GCC to compile the source code..
But facing with the compilation issues, with lot of GCC C libs differing between AIX box to Linux box...
Pls help me... (1 Reply)
Hi All,
I am currently facing new problem of migrating C(c language) application from AIX machine to Linux machine. We are using GCC to compile the source code..
But facing with the compilation issues, with lot of GCC C libs differing between AIX box to Linux box...
Pls help me... (1 Reply)
We are changing our OS from HP-Unix 11 to Linux Red Hat. We have few k- shell, c - shell and sql scripts which are currently running under HP-Unix 11. Will these scripts work on LINUX as it is? or we need to do any code changes?IS there anyone who have done this kind of migration before?Thanks for... (2 Replies)
We have certain number of scripts that run on AIX server using ksh.
Now that we migrate these scripts to Linux servers.
We need to know what are the changes that we have to perform in script to make it compatible to run on Linux.
Say like in our Unix -AIX "print" command worked.
But that did... (6 Replies)
I'm New to AIX / VIOS
We're doing a FC switch cutover on an ibm device, connected via SAN.
How do I tell if one path to my remote disk is lost? (aix lvm)
How do I tell when my link is down on my HBA port?
Appreciate your help, very much! (4 Replies)
Hi,
recently we have migrated our current AIX server to Linux, we have lot of shell script, few of them are FTP scripts.
we have copied the complete AIX file system to linux 7.2 as it is.
could you please highlight what are the things we need to look into it .
in AIX we are using .netrc to... (3 Replies)
Discussion started by: Riverstone
3 Replies
LEARN ABOUT HPUX
expr
expr(1) General Commands Manual expr(1)NAME
expr - evaluate arguments as an expression
SYNOPSIS
arguments
DESCRIPTION
takes arguments as an expression, evaluates, then writes the result on the standard output. Terms in the expression must be separated by
blanks. Characters special to the shell must be escaped. Note that rather than the null string, is returned to indicate a zero value.
Strings containing blanks or other special characters should be quoted. Integer-valued arguments can be preceded by a unary minus sign.
Internally, integers are treated as 32-bit, 2's complement numbers.
The operators and keywords are listed below. Characters that need to be escaped are preceded by The list is in order of increasing prece-
dence with equal-precedence operators grouped within symbols.
Returns the first expr if it is neither null nor otherwise returns the second expr.
In the UNIX 2003 environment, returns 0 if the first expr is null or and the second expr is null.
Returns the first expr if neither expr is null or otherwise returns
If both arguments are integers, and if the comparison is satisfied,
expr returns otherwise it returns expr returns the result of an integer comparison if both arguments are integers; other-
wise returns the result of a lexical comparison (note that and are identical, in that both test for equality).
Addition or subtraction of decimal integer-valued arguments.
Multiplication, division or remainder of decimal
integer-valued arguments producing an integer result.
The matching operator
compares the first argument with the second argument which must be a regular expression. expr supports the Basic Regular
Expression syntax (see regexp(5)), except that all patterns are ``anchored'' (i.e., begin with and, therefore, is not a
special character, in that context. Normally, the matching operator returns the number of characters matched (0 on fail-
ure). Alternatively, the pattern symbols can be used to return a portion of the first argument.
The length of expr.
Takes the substring of the first
expr, starting at the character specified by the second expr for the length given by the third expr.
Returns the position in the first
expr which contains a character found in the second expr.
Match is a prefix operator equivalent to the infix operator
Grouping symbols. Any expression can be placed within parentheses. Parentheses can be nested to a depth of as specified in the header file
EXTERNAL INFLUENCES
Environment Variables
determines the collating sequence used in evaluating regular expressions and the behavior of the relational operators when comparing string
values.
determines the interpretation of text as single- and/or multi-byte characters, and the characters matched by character class expressions in
regular expressions.
determines the language in which messages are displayed.
If or is not specified in the environment or is set to the empty string, the value of is used as a default for each unspecified or empty
variable. If is not specified or is set to the empty string, a default of "C" (see lang(5)) is used instead of If any internationalization
variable contains an invalid setting, behaves as if all internationalization variables are set to "C" (see environ(5)).
If is set to it enables the UNIX 2003 Standard environment.
International Code Set Support
Single- and multi-byte character code sets are supported.
RETURN VALUE
As a side effect of expression evaluation, expr returns the following exit values:
Expression is neither null nor zero.
Expression is null or zero.
Invalid expression.
An error occurred while evaluating the expression.
DIAGNOSTICS
Operator or operand errors
Arithmetic attempted on a string
EXAMPLES
Add 1 to the shell variable
For equal to either or just return the last segment of a path name (i.e., Beware of alone as an argument because expr interprets it as the
division operator (see below):
A better representation of the previous example. The addition of the characters eliminates any ambiguity about the division operator and
simplifies the whole expression:
Return the number of characters in
WARNINGS
After argument processing by the shell, expr cannot tell the difference between an operator and an operand except by the value. If is an
the command:
resembles:
as the arguments are passed to expr (and they will all be taken as the operator). The following works:
AUTHOR
was developed by OSF and HP.
SEE ALSO sh(1), test(1), environ(5), lang(5), regexp(5).
STANDARDS CONFORMANCE expr(1)