Команды, зависящие от пути в .bashrc

Нет необходимости в цикле, если вы знаете, что всегда будете получать четыре целых числа в командной строке:

#!/bin/sh

sum=$(( $1 + $2 + $3 + $4 ))
printf 'sum is %d\n' "$sum"

В качестве альтернативы просто

#!/bin/sh

printf 'sum is %d\n' "$(( $1 + $2 + $3 + $4 ))"

Для поддержки произвольного количества аргументов вам потребуется цикл:

#!/bin/sh

while [ "$#" -gt 0 ]; do
    sum=$(( sum + $1 ))
    shift
done

printf 'sum is %d\n' "$sum"

Этот сценарий будет перебирать свои аргументы командной строки, добавляя первый из них к переменной sumи удаляя его из списка аргументов командной строки, пока не останется аргументов. Расширение переменной $#расширится до количества аргументов командной строки, а shiftудалит $1из списка, переместив $2на место (и $3на $2и т. д. ).

В качестве альтернативы:

#!/bin/sh

for num do
    sum=$(( sum + num ))
done

printf 'sum is %d\n' "$sum"

Вместо того, чтобы постоянно сдвигать список аргументов командной строки, он оставляет список нетронутым и перебирает его, добавляя каждый из них в sumпо очереди.

Заголовок цикла for num doтакже может быть записан как for num in "$@"; do.

0
13.05.2020, 16:52
1 ответ

Передать аргументы функции в программу, которую вы вызываете из функции:

composer () {
    if [ "$PWD" = "/home/vhosts/domainName/httpdocs" ]; then
       /usr/bin/php7.3 lib/composer "$@"
    elif [ "$PWD" = "/home/vhosts/domainName2/httpdocs" ]; then
        /usr/bin/php5.6 composer.phar "$@"
    else
       command composer "$@"
    fi
}

"$@"будет расширяться до аргументов функции, заключенных в отдельные кавычки (двойные кавычки необходимы ).

Также обратите внимание, что при вызове только composerвам придется использовать command composer, поскольку в противном случае вы вызывали бы функцию рекурсивно.

Я также исправил некоторые мелкие синтаксические ошибки, чтобы сделать функцию переносимой.

С помощью этой функции выполнение

composer install

в /home/vhosts/domainName/httpdocsприведет к

/usr/bin/php7.3 lib/composer install

Другой вариант функции:

composer () {
    case $PWD in
        "/home/vhosts/domainName/httpdocs")
            /usr/bin/php7.3 lib/composer "$@"
            ;;
        "/home/vhosts/domainName2/httpdocs")
            /usr/bin/php5.6 composer.phar "$@"
            ;;
        *)
            command composer "$@"
    esac
}
1
28.04.2021, 23:14

Теги

Похожие вопросы