Назначение переменной положения в bash - PullRequest
0 голосов
/ 12 февраля 2020

Как назначить переменную позиции в условии if?

Например, мой сценарий называется test.sh. Если я задаю первую переменную как «T», я хотел бы видеть напечатанные переменные $ 2 и $ 3. Основной причиной является использование переменных $ 2 и $ 3 в других случаях позже. Я хотел бы установить переменные $ 2 и $ 3 10 и 15 соответственно.

 #!/bin/bash

echo "The first variable : $1"
echo "The second variable  : $2"
echo "The third variable : $3"
if [ $1 == "T" ]
        then
         $2 = 10
         $5 = 15
fi
echo "$2"
echo "$3"

Ошибка показывает: «команда не найдена». Я предполагаю, что я делаю синтаксическую ошибку?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Вы не можете назначить «переменные положения» (параметры). Однако вы можете использовать set, но вы можете потерять другие параметры:

#!/bin/bash

echo "The first variable : $1"
echo "The second variable  : $2"
echo "The third variable : $3"
if [ "$1" == "T" ]
        then
        set -- T 10 15
fi
echo "$2"
echo "$3"

Если вы хотите сохранить другие параметры, вам нужно будет использовать "$@" и shift:

$ set -- 1 2 3 4 5 6 7 8 9 10
$ echo "$@"
1 2 3 4 5 6 7 8 9 10
$ set -- T 10 15
$ echo "$@"
T 10 15
$ set -- 1 2 3 4 5 6 7 8 9 10
$ shift 3
$ set -- T 10 15 "$@"
$ echo "$@"
T 10 15 4 5 6 7 8 9 10

если вы хотите для go совместимости с POSIX, вы также можете использовать предложение ruakh в bash / zsh:

$ set -- 1 2 3 4 5 6 7 8 9 10
$ echo ${@:4}"
4 5 6 7 8 9 10
$ set -- T 10 15 "${@:4}"
$ echo "$@"
T 10 15 4 5 6 7 8 9 10

Примечание: "переменные положения" на самом деле параметры оболочки . Кроме того, вы четко заявили, что хотите их использовать, но я должен сказать вам, что большую часть времени вам лучше использовать обычные переменные оболочки.

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

Да, у вас есть синтаксическая ошибка. Способ присвоения переменной - NAME=VALUE. Обратите внимание на отсутствие знака доллара и пробелов вокруг знака равенства. Однако 2=VALUE также недопустимо, поскольку число не является допустимым именем. $2 на самом деле параметр , а не переменная.

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

#!/bin/bash

first="$1"
second="$2"
third="$3"

echo "The first variable: $first"
echo "The second variable: $second"
echo "The third variable: $third"
if [ "$first" == "T" ]; then
    second=10
    third=15
fi
echo "$second"
echo "$third"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...