[+] expr index nie zwraca 1

Potrzebujesz pomocy z C, C++, perl, python, itp.
johnyjj2
Posty: 14
Rejestracja: 01 stycznia 2010, 16:04

[+] expr index nie zwraca 1

Post autor: johnyjj2 » 13 marca 2016, 19:37

Cześć,

Kod: Zaznacz cały

myusername@mycompname:~$ blah="abcNetia123"
myusername@mycompname:~$ expr index "$blah" Netia
1
myusername@mycompname:~$ expr index "$blah" t
6
myusername@mycompname:~$ expr index "$blah" N
4
myusername@mycompname:~$ expr index "$blah" Ne
4
myusername@mycompname:~$ expr index "$blah" Net
4
myusername@mycompname:~$ expr index "$blah" Neti
4
myusername@mycompname:~$ expr index "$blah" Netia
1
myusername@mycompname:~$ expr index "$blah" Netia1
1
myusername@mycompname:~$ expr index "$blah" a1
1
myusername@mycompname:~$ expr index "$blah" abcNN
1

Nie rozumiem dlaczego potrafi znaleźć indeks "expr index "$blah" Neti", ale już "expr index "$blah" Netia" się nie powodzi. Zadziałało dopiero z apostrofem (chociaż i tutaj chyba jakoś inaczej działą np. pojedynczy apostrof i znak tyldy, który wizualnie wygląda prawie tak samo). (Chętnie się dowiem, dlaczego jest to w taki sposób traktowane, jednak drugie pytanie poniżej jest dla mnie dużo bardziej istotne).

Również ten wynik traktuje tekst ze spacjami jako elementy tablicy, a nie tekst:

Kod: Zaznacz cały

myusername@mycompname:~$ varCurl="abc def curl: ( xyz asdf"
myusername@mycompname:~$ expr index '$varCurl' "curl: ("
4
myusername@mycompname:~$ expr index "$varCurl" "curl: ("
3
myusername@mycompname:~$ echo $varCurl
abc def curl: ( xyz asdf
Zatem jak to zrobić, żeby "expr index" traktował spację jako spację i nie zamieniał stringa na tablicę?

Spodziewam się wartości 9 lub 10, a nie 3 lub 4, dla tej konkretnej zmiennej z pierwszej linijki kodu.

johnyjj2
Posty: 14
Rejestracja: 01 stycznia 2010, 16:04

Re: expr index nie zwraca 1

Post autor: johnyjj2 » 13 marca 2016, 23:20

PS Znalazłem rozwiązanie:

Kod: Zaznacz cały

varCurl="abc def curl: ( xyz asdf"
search="curl: ("
rest=${varCurl#*$search}
echo $((${#varCurl}-${#rest}-${#search}))

Zablokowany