Что означает оператор «:» (двоеточие) в расширении переменной bash: VAR = $ {TEMP: 3}?

12

В чем смысл следующей строки в переменной bash?

VAR=${TEMP:3}
Каран шах
источник
1
@chaos Пожалуйста, не редактируйте вопрос так, чтобы он лучше соответствовал вашему ответу ;-).
Pilot6
@ Pilot6 Я не изменил значение. Или я что-то не так понимаю? Я сделал его лучше, чтобы найти (название) и более читабельным. У BTW : есть и другие значения, например, это встроенная команда bash. Я хотел отличаться от этого, потому что вопрос явно не об этом. Пользователь имеет в виду :оператор внутри имени переменной. Извините, я не хочу кого-то раздражать, но ваш откат не имеет смысла и должен быть отменен, но я не хочу войны редактирования здесь. Кроме того, это специфичные для bash и скриптов, так зачем удалять эти теги?
хаос
Вы удалили TEMPи VARпеременные и изменили вопрос так, чтобы другие ответы потеряли смысл.
Pilot6
@ Pilot6 В своем ответе я не ссылаюсь на VARпеременную. Но, тем не менее, вы можете изменить эту вещь обратно. Я хотел сделать вопрос более общим, менее конкретным. Это никогда не должно было саботировать другие ответы.
хаос
2
@ SnakeDoc нет, все по теме, все в порядке
Muru

Ответы:

15

Это расширение переменной и работает следующим образом (обратите внимание, что это только bashи kshспецифично и не будет работать в оболочке POSIX):

$ x=1234567890
$ echo ${x:3}
4567890
$ echo ${x:7}
890
$ echo ${x:3:5}
45678

  • ${var:pos}означает, что переменная varраскрывается, начиная со смещения pos.
  • ${var:pos:len}означает, что переменная varраскрывается, начиная со смещения posс длиной len.
хаос
источник
Вокс zshтоже
Кос
2
@kos Не стоит упоминать, потому что все работает zsh=) Я сделал скрипт диеты zshи потерял 10 кг за 1 неделю.
хаос
zshнаверняка заставляет вас тупить при наборе путей, когда вы его не используете :)
kos
1
@kos Хе-хе, это немного похоже на jquery: meta.stackexchange.com/a/19492
хаос
1
Ха, мне нравится, что единственный ответ, пытающийся действительно ответить на вопрос, получил -2 из-за "недостаточно jQuery"! :)
Кос
2

Этот оператор обрезает первые 3 символа переменной TEMPи назначает остаток переменной VAR.

Pilot6
источник