Как назначить переменную позиции в условии 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 ответа
Вы не можете назначить «переменные положения» (параметры). Однако вы можете использовать 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
если вы хотите отказаться от 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
Примечание: «переменные положения» на самом деле являются параметрами оболочки . Кроме того, вы четко заявили, что хотите их использовать, но я должен сказать вам, что в большинстве случаев вам лучше использовать обычные переменные оболочки.
Да, у вас есть синтаксическая ошибка. Способ присвоения переменной - 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"