[15:56] witam. Czy tu mogę zapytać o pomoc w skryptowaniu w bashu? [16:02] zapytać możesz, ale czy dostaniesz odpowiedź to inna sprawa :) [16:04] chodzi o to że próbuję napisać funkcję ułatwiającą pobieranie kluczy do repozytoriów i potrzebna mi w tym pomoc [16:14] a wiec [16:17] wstępna wersja wygląda tak: http://wklej.org/id/2962090/ [16:17] problem w tym, że \$$a nie będzie prawdopodobnie traktowana jako zmienna [16:23] oahi [16:23] hmm [16:29] no tak bo \ eskapuje ~~ [16:32] jak bym dał $$ to by mi wstawił ID procesu z literą a zamiast zamienić $a na wartość którą daje pętla for i poprzedzenie ją znakiem $, co spowodowało by zamianę tej wartości na zmienną [16:32] chodzi o to żeby \$$a zamieniło się w zmienną np. $2 [16:33] (w zależności od aktualnej wartości dla $a) [16:33] zmienna zmiennej? [16:33] http://stackoverflow.com/questions/10757380/bash-variable-variables [16:35] tj chodzi ci o a = kupa; kupa = 5; $a == 5 [16:45] nie do końca... chodzi o to że zmienna $a może przybrać wartość od 2 do liczby podanych argumentów [16:45] mcgiwer: jeśli piszesz w bashu (a nie sh), to używaj [[ ]] do testów, jeśli chcesz iterować po $1 $2 $3 itd, to man bash i szukaj shift w sekcji 'SHELL BUILTIN COMMANDS', albo pętla for w SHELL GRAMMAR, w Compund commands [16:47] dokładnie to co chcesz zrobić mógłbyś przez eval zrobić, ale użyj shift albo `for name ; do...` [16:48] mcgiwer: poza tym http://www.shellcheck.net/ [16:48] BlessJah: nie mam jeszcze tak dużej wprawy w pisaniu w bash-u... poza tym, jeśli looknąłeś do mojej "wklejki" to tam możesz zobaczyć, że pętla for jest w podanym przez ciebie formacie: for name ; do... [16:49] nie, nie jest "for name [ [ in [ word ... ] ] ; ] do " kwadratowe nawiasy znaczą że coś jest opcjonalne [16:50] btw, pytanie "jak pobrać zmienną której nazwa jest w innej zmiennej" a.k.a. $$var to http://xyproblem.info/ ;) [16:55] @BlessJah: poprawiłem trochę kod i dostałem błąd jedynie w miejscu for gdzie użyłem zakresu: "Bash doesn't support variables in brace range expansions." [16:56] foo() { for name; do echo $name; done; } ; foo a b c d [16:57] tak, 'for name; do...' to poprawna składnia pętli for w bashu [17:01] próbuję rozgryść dlaczego bash mi nie pozwala używać zakresu (Range) w pętli for i wywala błąd [17:02] mcgiwer: klasyczny przykład XY, przeczytaj pierwszy akapit: http://xyproblem.info/ [17:08] wiem co jest błędem, ale nie wiem jak go rozwiązać, ponieważ chcę aby pętla for przyjmowała zakres od 2 do liczby podanych argumantów, ale wywala że zakres nie akceptuje zmiennych [17:09] mcgiwer: po co chcesz iterować po zakresie 2..$# [17:10] ponieważ czasami trzeba podać na raz więcej kluczy do importu niż jeden, a to miało w tym pomóc [17:11] czyli chcesz iterować po kluczach które podałeś? [17:11] próba wklejenia ich jako 1 argument może nie zadziałać poprawnie [17:13] czyli chcesz po prostu iterować po argumentach? [17:13] chciałem zrobić tak: pierwszy argument to URL serwera kluczy, a następne to ID kluczy [17:14] czyli chcesz iterować po argumentach: specjalna zmienna $@ zawiera listę argumentów [17:15] tak, ale trzeba najpierw jakieś argumenty zdefiniować żeby miało co pokazać ;) [17:15] możesz użyć jej tak foo() { for bar in "$@" ; do echo "Arg: ${bar}" ; done } ; foo 1 2 3 4 [17:16] zaraz spróbuję [17:21] coś tam wyświetla, tylko przerzuca do nowej lini [17:22] taka uroda echo [17:30] mcgiwer: programujesz w jakimś języku innym niż bash? [17:31] tak... w PHP [17:32] http://php.net/manual/en/control-structures.foreach.php [17:32] a echo nie powinno wyrzucać do nowej lini... takie działanie daje echo -e "\n" [17:32] for value in "$@" [17:33] echo jest tutaj całkowicie nieistotne (poza tym powinno pokazywać nowe linie) [17:34] foo() { for bar in "$@" ; do printf "%s " "${bar}" ; done ; } ; foo 1 2 3 4 [17:34] masz bez newline [17:36] ok. Wyświetla jak chciałem. Teraz pytanie jak to przerobić aby rozbić to na zmienne [17:37] jak wspomniałem wcześniej, chciał bym aby $1 było url klucza a reszta ID klucza [17:37] s/url klucza/url serwera/ [17:38] mcgiwer: to już są zmienne, moja pętla robi (prawie) to samo co twoja gdyby \$$n działało [17:38] sorki... miało być: $1 było url serwera, a reszta url kluczy [17:41] foo() { url="$1" ; shift ; for bar in "$@" ; do printf "%s %s\n" "${url}" "${bar}" ; done ; } ; foo http 2 3 4 [17:41] nowa rzecz to shift przed pętlą for [17:42] http://php.net/manual/en/function.array-shift.php [17:43] z tą różnicą, że nie zwraca wartości elementu [17:48] znikam na jakiś czas. Odezwę się jak wrócę === mcgiwer is now known as mcgiwer_AWAY [17:49] spoko [21:04] echo -n nie robi nowej lini [21:04] echo bez niczego robi nowa linie [21:10] ~ Paulo Coelho [21:21] jacekowski: ten ostatni spam doszedl czy nie?