LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

... то у ТС'а будут проблемы с именами с пробелами

Не будет, так как использую «$@»

Только ты потом всё склеиваешь в одну строку.
И удаляешь ты первый аргумент, а не последний.

Ты б запустил бы то, что написал:

$ cat ./args.sh
#!/bin/sh

fn()
{
        echo -n "Arguments ($#):"
        while [ $# -gt 0 ]; do
                echo -n " '$1'"
                shift
        done
        echo
}

# fn "${@:1:$(($#-1))}"

ARGS=
while [ $# -gt 1 ]; do
        shift
        ARGS="$ARGS $1"
done

fn $ARGS

$ ./args.sh "one" "two two" "three three" "four four"
Arguments (6): 'two' 'two' 'three' 'three' 'four' 'four'

Исправление Kroz, :

... то у ТС'а будут проблемы с именами с пробелами

Не будет, так как использую «$@»

Только ты потом всё склеиваешь в одну строку.

Ты б запустил бы то, что написал:

$ cat ./args.sh
#!/bin/sh

fn()
{
        echo -n "Arguments ($#):"
        while [ $# -gt 0 ]; do
                echo -n " '$1'"
                shift
        done
        echo
}

# fn "${@:1:$(($#-1))}"

ARGS=
while [ $# -gt 1 ]; do
        shift
        ARGS="$ARGS $1"
done

fn $ARGS

$ ./args.sh "one" "two two" "three three" "four four"
Arguments (6): 'two' 'two' 'three' 'three' 'four' 'four'

Исходная версия Kroz, :

... то у ТС'а будут проблемы с именами с пробелами

Не будет, так как использую «$@»

Только ты потом всё склеиваешь в одну строку.

Ты б запустил бы то, что написал:

$ cat ./args.sh
#!/bin/sh

fn()
{
        echo -n "Arguments ($#):"
        while [ $# -gt 0 ]; do
                echo -n " '$1'"
                shift
        done
        echo
}

# fn "${@:1:$(($#-1))}"

ARGS=
while [ $# -gt 1 ]; do
        shift
        ARGS="$ARGS $1"
done

fn $ARGS

$ ./args.sh "one" "two two" "three three" "four four"
Arguments (6): 'two' 'two' 'three' 'three' 'four' 'four'