Co robi operator „:” (dwukropek) w rozwinięciu zmiennej bash: VAR = $ {TEMP: 3}?

12

Jakie jest znaczenie następującego wiersza w zmiennej w bash?

VAR=${TEMP:3}
Karan Shah
źródło
1
@chaos Nie edytuj pytania, aby lepiej pasowało do odpowiedzi ;-).
Pilot6
@ Pilot6 Nie zmieniłem znaczenia. Czy rozumiem coś złego? Sprawiłem, że lepiej jest znaleźć (tytuł) i jest bardziej czytelny. BTW : ma również inne znaczenie, na przykład jest to wbudowane polecenie bash. Chciałem się od tego różnić, ponieważ oczywiście nie chodzi o to. Użytkownik ma na :myśli operatora wewnątrz nazwy zmiennej. Przepraszam, nie chcę nikogo denerwować, ale wycofanie się nie ma sensu i powinno zostać odwrócone, ale nie chcę tutaj wojny edytorskiej. Co więcej, jest specyficzny dla bash i skryptów, więc po co usuwać te tagi?
chaos
Po wyjęciu TEMPi VARzmienne i zmienił kwestia sposobu, w jaki inne odpowiedzi stracił sens.
Pilot6
@ Pilot6 W mojej odpowiedzi nie odnoszę się do VARzmiennej. Ale możesz zmienić tę jedną rzecz z powrotem. Chciałem, aby pytanie było bardziej ogólne, mniej szczegółowe. Nigdy nie miało to na celu sabotowania innych odpowiedzi.
chaos
2
@ SnakeDoc nie, to w porządku na temat
mur

Odpowiedzi:

15

Jest to rozszerzenie zmienne i działa w ten sposób (zauważ, że jest to tylko bashi kshspecyficzne i nie będzie działać w powłoce POSIX):

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

  • ${var:pos}oznacza, że ​​zmienna varjest rozwijana, zaczynając od przesunięcia pos.
  • ${var:pos:len}oznacza, że ​​zmienna varjest rozwijana, zaczynając od przesunięcia poso długość len.
chaos
źródło
Woks zshteż
Kos
2
@kos Nie warto wspominać, ponieważ wszystko działa w zsh=) Zrobiłem skrypt diety zshi zrzuciłem 10 kg w ciągu 1 tygodnia.
chaos
zshna pewno sprawia, że ​​głupsze jest pisanie ścieżek, kiedy się jej nie używa :)
Kos
1
@kos Hehe, to trochę jak jquery: meta.stackexchange.com/a/19492
chaos
1
Ha, uwielbiam, jak jedyna odpowiedź próbująca naprawdę odpowiedzieć na pytanie otrzymała -2 z powodu „niewystarczającej ilości jQuery”! :)
Kos
2

Ten operator odcina pierwsze 3 znaki zmiennej, TEMPa resztę przypisuje do zmiennej VAR.

Pilot 6
źródło