Differences between revisions 18 and 30 (spanning 12 versions)
Revision 18 as of 2013-12-29 11:52:15
Size: 365
Editor: ArielleN7
Comment:
Revision 30 as of 2025-01-22 23:50:25
Size: 2119
Editor: GreyCat
Comment: adjust markup
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Hello from United States. I'm glad to came across you. My first name is Damien. <<BR>>
I live in a city called Sumner in south United States.<<BR>>
I was also born in Sumner 32 years ago. Married in November 2004. I'm working at the post office.<<BR>>
<<BR>>
Also visit my blog ... [[https://underwaterfilters.shutterfly.com/|Under Sink Water Filter Reviews]]
<<Anchor(faq25)>>
== How can I access positional parameters after $9? ==
Use `${10}` instead of `$10`. This works for [[BASH]] and KornShell and is standardized by [[POSIX]], but it doesn't work for older BourneShell implementations. Another way to access arbitrary positional parameters after $9 is to use `for`, e.g. to get the last parameter:

{{{
    # Bourne
    for last
    do
        : # nothing
    done

    echo "last argument is: $last"
}}}

To get an argument by number, we can use a counter:

{{{
    # Bourne
    n=12 # This is the number of the argument we are interested in
    i=1
    for arg
    do
        if test $i -eq $n
        then
            argn=$arg
            break
        fi
        i=`expr $i + 1`
    done
    echo "argument number $n is: $argn"
}}}

This has the advantage of not "consuming" the arguments. If this is no problem, the `shift` command discards the first positional arguments:

{{{
    shift 11
    echo "the 12th argument is: $1"
}}}

and can be put into a helpful function:

{{{
    # Bourne
    getarg() { # $1 is argno
        shift "$1" && echo "$1"
    }
    arg12=`getarg 12 "$@"`
}}}

In addition, bash and ksh93 treat the set of positional parameters as an [[BashFAQ/005|array]], and you may use [[BashFAQ/073|parameter expansion]] syntax to address those elements in a variety of ways:

{{{
    # Bash, ksh93
    for x in "${@:(-2)}" # iterate over the last 2 parameters
    for y in "${@:2}" # iterate over all parameters starting at $2
                            # which may be useful if we don't want to shift
}}}

Although direct access to any positional argument is possible this way, it's seldom needed. The common alternative is to use `getopts` to process options (e.g. "-l", or "-o filename"), and then use either `for` or `while` to process all the remaining arguments in turn. An explanation of how to process command line arguments is available in [[BashFAQ/035|FAQ #35]], and another is found at http://www.shelldorado.com/goodcoding/cmdargs.html

----
CategoryShell

How can I access positional parameters after $9?

Use ${10} instead of $10. This works for BASH and KornShell and is standardized by POSIX, but it doesn't work for older BourneShell implementations. Another way to access arbitrary positional parameters after $9 is to use for, e.g. to get the last parameter:

    # Bourne
    for last
    do
        : # nothing
    done

    echo "last argument is: $last"

To get an argument by number, we can use a counter:

    # Bourne
    n=12        # This is the number of the argument we are interested in
    i=1
    for arg
    do
        if test $i -eq $n
        then
            argn=$arg
            break
        fi
        i=`expr $i + 1`
    done
    echo "argument number $n is: $argn"

This has the advantage of not "consuming" the arguments. If this is no problem, the shift command discards the first positional arguments:

    shift 11
    echo "the 12th argument is: $1"

and can be put into a helpful function:

    # Bourne
    getarg() { # $1 is argno
        shift "$1" && echo "$1"
    }
    arg12=`getarg 12 "$@"`

In addition, bash and ksh93 treat the set of positional parameters as an array, and you may use parameter expansion syntax to address those elements in a variety of ways:

    # Bash, ksh93
    for x in "${@:(-2)}"    # iterate over the last 2 parameters
    for y in "${@:2}"       # iterate over all parameters starting at $2
                            # which may be useful if we don't want to shift

Although direct access to any positional argument is possible this way, it's seldom needed. The common alternative is to use getopts to process options (e.g. "-l", or "-o filename"), and then use either for or while to process all the remaining arguments in turn. An explanation of how to process command line arguments is available in FAQ #35, and another is found at http://www.shelldorado.com/goodcoding/cmdargs.html


CategoryShell

BashFAQ/025 (last edited 2025-01-22 23:50:25 by GreyCat)