Я смотрю на код, показанный ниже, и он проверяет ввод, если аргументы строки / столбца начинаются с или -r
или -c
. Что ${1:0:2}
значит в этом контексте?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
user165213
источник
источник
bash
.getopt
илиgetopts
сделать вашу жизнь проще (или жизнь того, кто это сделал).Ответы:
Это шаблон оболочки Substring Expansion (подкласс расширения параметров).
Формат такой:
и индексация начинается с 0.
Скажем, у вас есть переменная
foo
, затем${foo:0:2}
выдает первые два символа (от позиции 0 до следующих 2).Пример:
В вашем случае первое число
1
относится к имени переменной$1
, которое является первым аргументом, переданным через командную строку (в основной программе), или первым аргументом, переданным функции.Так что в вашем случае
"${1:0:2}"
будет:начать извлечение подстроки, начиная с индекса 0, т.е. первого символа
и продолжить до следующих двух символов
поэтому после операции вы получите первые два символа (индексированные в 0 и 1) входной строки.
[ "${1:0:2}" != $rowArgName ]
И[ "${1:0:2}" != $colArgName ]
проверяет , если выход subtring равно некоторые другие строки.источник
-c
или-r
, что, вероятно, лучше было бы реализоватьgetopts
Небольшая выдержка из
man bash
:источник
Это простое извлечение подстроки из переменной. Рассматриваемая переменная является первым параметром скрипта (который есть
1
).Если у меня есть переменная, FOO, я могу видеть первые два символа ее значения с
${FOO:0:2}
. То же самое делается в вашем примере с первым аргументом.источник