BASH сохранить аргументы командной строки как отдельные переменные - PullRequest
0 голосов
/ 07 февраля 2020

Я пишу сценарий bash, и я хотел бы иметь возможность хранить каждый аргумент командной строки как его собственную переменную. Поэтому, если была командная строка, например:

./myscript.sh word anotherWord yetAnotherWord

Результат должен быть таким:

variable1 = word
variable2 = anotherWord
variable3 = yetAnotherWord

Я попытался использовать для l oop и $ @ вот так:

declare -A myarray
counter=0
for arg in "$@"
do
  myarray[$counter]=arg
done

но когда я пытаюсь повторить, скажем, переменная1, я получаю arg[1] вместо ожидаемого word, любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Они уже хранятся в переменной: $@. Вы можете получить доступ к отдельным индексам как $1, $2, et c. Вам не нужно хранить их в новых переменных, если их достаточно.

# Loop over arguments.
for arg in "$@"; do
    echo "$arg"
done

# Access arguments by index.
echo "First  = $1"
echo "Second = $2"
echo "Third  = $3"

Если вам нужен новый массив, args=("$@") назначит их всем новому массиву за один снимок. Нет необходимости в явном для l oop. Затем вы можете получить доступ к отдельным элементам с помощью ${args[0]} и т. П.

args=("$@")

# Loop over arguments.
for arg in "${args[@]}"; do
    echo "$arg"
done

# Access arguments by index.
echo "First  = ${args[0]}"
echo "Second = ${args[1]}"
echo "Third  = ${args[2]}"

(обратите внимание, что при использовании явного массива индексы начинаются с 0 вместо 1.)

0 голосов
/ 07 февраля 2020

Я бы использовал время l oop следующим образом:

#!/bin/bash

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

done

#output test
echo ${array[0]}
echo ${array[1]}
echo ${array[2]}

Вывод:

root@system:/# ./test.sh one two tree 
one two tree

Я использую счетчик для переданных аргументов $# и shift первый аргумент $1 удаляется, а $2 получает $1.

Надеюсь, я смогу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...