Prawdopodobnie dobrze jest przyzwyczaić się do wstawiania $foopodwójnych cudzysłowów, w czasach, gdy naprawdę ma to znaczenie.
Cascabel,
104
Nauczono nas, aby zawsze tak postępować, ponieważ gdy nastąpi podstawienie, spacje będą ignorowane przez powłokę, ale podwójne cudzysłowy zawsze będą chronić te spacje.
Strawberry
62
Czy w twoim pierwszym przykładzie musi być miejsce? Czy można zrobić coś takiego foo="$fooworld"? Zakładałbym, że nie ...
nonsens,
341
@nonsensickle To szukałoby zmiennej o nazwie fooworld. Ujednoznacznienie odbywa się za pomocą nawiasów klamrowych, jak w foo="${foo}world"...
twalberg
4
@ JVE999 Tak, to również działa, chociaż moim zdaniem nie jest tak dobre dla przejrzystości kodu ... Ale to może być tylko moja preferencja ... Istnieje kilka innych sposobów, aby to zrobić - chodzi o to, że upewniając się, że nazwa zmiennej jest oddzielona od części o nazwie innej niż zmienna, aby poprawnie przeanalizować.
twalberg,
1127
Bash obsługuje również +=operatora, jak pokazano w tym kodzie:
Czy mogę użyć tej składni ze słowem kluczowym eksportu? np. export A+="Z"a może Azmienną trzeba wyeksportować tylko raz?
levesque
3
@levesque: Both :-). Zmienne należy wyeksportować tylko raz, ale export A+=Zdziała również całkiem nieźle.
thkala
38
Ponieważ jest to bashizm, myślę, że warto wspomnieć, że nigdy nie powinieneś używać #!/bin/shw skrypcie używającym tej konstrukcji.
Score_Under
2
Jest to konkretny i tylko operator plus-równy. To znaczy, w przeciwieństwie do Javascript, w Bash, echo $ A + $ B drukuje „X Y + Z”
phpguru
6
Bashism to funkcja powłoki, która jest obsługiwana tylko w bashniektórych bardziej zaawansowanych powłokach. Nie będzie działał pod busybox shlub dash(który jest /bin/shna wielu dystrybucjach), ani z niektórymi innymi powłokami, takimi jak /bin/shdostarczone we FreeBSD.
Score_Under
960
Najpierw uderz
Ponieważ pytanie dotyczy konkretnie Basha , moja pierwsza część odpowiedzi przedstawiłaby różne sposoby właściwego wykonania tego:
+=: Dołącz do zmiennej
Składni +=można używać na różne sposoby:
Dołącz do ciągu var+=...
(Ponieważ jestem oszczędny, użyję tylko dwie zmienne fooi a, a następnie ponownie użyć tego samego w całej odpowiedź. ;-)
a=2
a+=4
echo $a
24
Używając składni pytania Przepełnienie stosu ,
foo="Hello"
foo+=" World"
echo $foo
HelloWorld
działa w porządku!
Dołącz do liczby całkowitej ((var+=...))
zmienna ajest ciągiem, ale także liczbą całkowitą
echo $a
24((a+=12))
echo $a
36
Dołącz do tablicy var+=(...)
Nasz ajest również tablicą tylko jednego elementu.
a+=(one word "hello world"!'hello world!' $'hello world\041')
declare -p a
declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="h
ello world!" [6]="hello world!")'
printf: Ponownie konstruuj zmienną za pomocą wbudowanego polecenia
printfWbudowane polecenie daje potężny sposób rysunek format string. Ponieważ jest to wbudowany Bash , istnieje możliwość wysłania sformatowanego ciągu do zmiennej zamiast drukowania na stdout:
echo ${a[@]}3618 one word hello world! hello world! hello world!
W tej tablicy jest siedem ciągów . Więc możemy zbudować sformatowany ciąg zawierający dokładnie siedem argumentów pozycyjnych:
+=Operator jest również o wiele szybciej niż $a="$a$b"w moich testach .. Który ma sens.
Matt
7
Ta odpowiedź jest niesamowita, ale myślę, że brakuje jej var=${var}.shprzykładu z innych odpowiedzi, co jest bardzo przydatne.
genorama,
1
Czy bashjedyna powłoka z +=operatorem? Chcę się przekonać, czy jest wystarczająco przenośny
dashy
1
@dashesy no. z pewnością nie jest to jedyna powłoka z +=operatorem, ale wszystkie te sposoby to bashizmy , więc nie przenośne! Nawet ty możesz napotkać specjalny błąd w przypadku niewłaściwej wersji bash!
Chociaż nie są używane żadne specjalne znaki, ani spacje, podwójne cudzysłowy, cudzysłowy i nawiasy klamrowe są bezużyteczne: var=myscript;var=$var.sh;echo $varmiałyby takie same efekty (Działa w trybie bash, myślnik, busybox i innych).
F. Hauri
@ F.Hauri dziękuję za zwrócenie na to uwagi. Ale gdybyś dołączył liczbę, nie zadziałałoby: np. echo $var2Nie produkujemyscript2
Pynchia
@Pynchia Działa z powodu .niedozwolonej kropki w nazwie zmiennej. Jeśli jeszcze echo ${var}2lub zobacz moją odpowiedź
F. Hauri
119
bla=hello
laber=kthx
echo "${bla}ohai${laber}bye"
Wyjdzie
helloohaikthxbye
Jest to przydatne, gdy
$blaohai
prowadzi do błędu nie znaleziono zmiennej. Lub jeśli masz ciągi znaków lub inne znaki specjalne. "${foo}"właściwie ucieka przed wszystkim, co do niego włożysz.
Jest to najbardziej przydatna odpowiedź na skrypty powłoki. Znalazłem się w ciągu ostatnich 30 minut, ponieważ miałem wolne miejsce przed i po znaku równości !!
Stefan
8
foo = "$ {foo} Świat"
XXL
@XXL na pewno wolałbym używać nawiasów do enkapsulacji nazwy var. Gorąco polecam
Sergio A.
33
Sposób, w jaki rozwiązałem problem, jest po prostu
$a$b
Na przykład,
a="Hello"
b=" World"
c=$a$b
echo "$c"
który produkuje
HelloWorld
Jeśli na przykład spróbujesz połączyć łańcuch z innym łańcuchem,
To mnie zaskakuje; Spodziewałbym się c=$a$btutaj, że zrobię to samo, co c=$a World(które spróbuje uruchomić Worldjako polecenie). To chyba oznacza, że przypisanie jest analizowane przed rozwinięciem zmiennych.
mwfearnley,
30
Oto zwięzłe podsumowanie tego, o czym mówi większość odpowiedzi.
Powiedzmy, że mamy dwie zmienne, a 1 $ jest ustawiony na „jeden”:
set one two
a=hello
b=world
Poniższa tabela wyjaśnia różne konteksty, gdzie możemy połączyć z wartościami ai baby utworzyć nową zmienną, c.
Context | Expression | Result (value of c)
--------------------------------------+-----------------------+---------------------
Two variables | c=$a$b | helloworld
A variable and a literal | c=${a}_world | hello_world
A variable and a literal | c=$1world | oneworld
A variable and a literal | c=$a/world | hello/world
A variable, a literal, with a space | c=${a}" world" | hello world
A more complex expression | c="${a}_one|${b}_2" | hello_one|world_2
Using += operator (Bash 3.1 or later) | c=$a; c+=$b | helloworld
Append literal with += | c=$a; c+=" world" | hello world
Kilka uwag:
zawarcie RHS zadania w podwójnych cudzysłowach jest ogólnie dobrą praktyką, choć w wielu przypadkach jest dość opcjonalne
+= jest lepszy z punktu widzenia wydajności, jeśli duży ciąg jest budowany małymi przyrostami, szczególnie w pętli
użyj {}wokół nazw zmiennych, aby ujednoznacznić ich rozwinięcie (jak w wierszu 2 w powyższej tabeli). Jak widać w wierszach 3 i 4, nie ma potrzeby, {}chyba że zmienna jest łączona z łańcuchem rozpoczynającym się od znaku, który jest prawidłowym pierwszym znakiem w nazwie zmiennej powłoki, czyli alfabet lub podkreślnik.
Tak właśnie zrobiłem i uznałem to za o wiele prostsze i bardziej bezpośrednie niż inne odpowiedzi. Czy istnieje powód, dla którego nikt z najczęściej głosowanych odpowiedzi nie wskazał tej opcji?
quimnuss
1
@ quimnuss Fakt, że ciągi nie pasują do tych używanych w pytaniu OP, może być dobrym powodem.
jlliagre
20
Jeśli chcesz dołączyć coś w rodzaju podkreślenia, użyj klawisza Escape (\)
Lub alternatywnie $ {FILEPATH} _ $ DATEX. Tutaj {} służą do wskazania granic nazwy zmiennej. Jest to odpowiednie, ponieważ znak podkreślenia jest prawną postacią w nazwach zmiennych, więc w twoim fragmencie bash faktycznie próbuje rozwiązać FILEPATH_, a nie tylko $ FILEPATH
Nik O'Lai
1
dla mnie miałem jedną zmienną tj. $ var1 i stałą obok tego, więc echo $ var1_costant_traling_part działa dla mnie
YouAreAwesome
2
Wydaje mi się, że do ucieczki wystarczy jeden luz echo $a\_$b. Jak wskazano w komentarzu Nik O'Lai, podkreślenie jest regularną postacią. Obsługa białych znaków jest znacznie bardziej wrażliwa na ciągi znaków, echo i konkatenację - można używać \ tego wątku i czytać go dokładnie, ponieważ ten problem pojawia się od czasu do czasu.
Składnia pierwszego bloku jest myląca. Co oznaczają te znaki $?
XavierStuvw
15
Nawet jeśli operator + = jest teraz dozwolony, został wprowadzony w wersji Bash 3.1 w 2004 roku.
Każdy skrypt używający tego operatora w starszych wersjach Bash nie powiedzie się z błędem „nie znaleziono polecenia”, jeśli masz szczęście lub „błędem składniowym w pobliżu nieoczekiwanego tokena”.
Dla tych, którym zależy na kompatybilności wstecznej, trzymaj się starszych standardowych metod konkatenacji Basha, takich jak te wymienione w wybranej odpowiedzi:
Punkt ciągów ze spacją odczytywaną jako polecenie pojawia się w punkcie definicji. d=DD DDDałbym więc DD: command not found--- zauważ, że jest to ostatni DD, a raczej d, że nie został znaleziony. Jeśli wszystkie operandy są poprawnie sformatowane i zawierają już wymagane spacje, możesz po prostu połączyć je s=${a}${b}${c}${d}; echo $sz mniejszymi znakami cudzysłowu. Możesz także użyć \ (klawisz Escape), aby uniknąć tych problemów --- d=echo\ echonie uruchomi żadnego wywołania echa, podczas gdy d=echo echobędzie.
XavierStuvw
7
Jest jeden szczególny przypadek, w którym powinieneś zachować ostrożność:
Działa to, ale czasami daje nieprzewidywalne wyniki, ponieważ interpolacja zmiennych nie jest chroniona. Dlatego nie możesz polegać na tym formularzu we wszystkich przypadkach użycia.
Anthony Rutledge
5
Jeśli jest to przykład dodawania " World"do oryginalnego ciągu znaków, może to być:
Błędy wskazują, że mój Bash dostał się do 335,54432 MB, zanim się zawiesił . Możesz zmienić kod z podwojenia danych na dodawanie stałej, aby uzyskać bardziej szczegółowy wykres i punkt awarii. Ale myślę, że powinno to dać ci wystarczającą ilość informacji, aby zdecydować, czy cię to obchodzi. Osobiście poniżej 100 MB nie. Twój przebieg może się różnić.
dzieje się tak, ponieważ znak podkreślenia jest poprawnym znakiem w nazwach zmiennych, więc bash widzi foo_ jako zmienną. Kiedy trzeba powiedzieć Bashowi dokładne granice nazwy var, można użyć nawiasów klamrowych: PREFIX _ $ {foo} _ $ bar
W 1. linii możesz upuścić widelec , używając: date "+The current time is %a %b %d %Y +%T"zamiast echo ...$(date). Zgodnie z niedawnym bash, można napisać: printf "The current time is %(%a %b %d %Y +%T)T\n" -1.
F. Hauri
1
Moim zdaniem najprostszym sposobem na połączenie dwóch łańcuchów jest napisanie funkcji, która zrobi to za Ciebie, a następnie użycie tej funkcji.
foo="Hello"
foo=$foo" World"
echo $foo
działało to raczej dla „#! / bin / sh”foo1="World" foo2="Hello" foo3="$foo1$foo2"
Odpowiedzi:
Ogólnie rzecz biorąc, aby połączyć dwie zmienne, możesz po prostu zapisać je jedna po drugiej:
źródło
$foo
podwójnych cudzysłowów, w czasach, gdy naprawdę ma to znaczenie.foo="$fooworld"
? Zakładałbym, że nie ...fooworld
. Ujednoznacznienie odbywa się za pomocą nawiasów klamrowych, jak wfoo="${foo}world"
...Bash obsługuje również
+=
operatora, jak pokazano w tym kodzie:źródło
export A+="Z"
a możeA
zmienną trzeba wyeksportować tylko raz?export A+=Z
działa również całkiem nieźle.#!/bin/sh
w skrypcie używającym tej konstrukcji.bash
niektórych bardziej zaawansowanych powłokach. Nie będzie działał podbusybox sh
lubdash
(który jest/bin/sh
na wielu dystrybucjach), ani z niektórymi innymi powłokami, takimi jak/bin/sh
dostarczone we FreeBSD.Najpierw uderz
Ponieważ pytanie dotyczy konkretnie Basha , moja pierwsza część odpowiedzi przedstawiłaby różne sposoby właściwego wykonania tego:
+=
: Dołącz do zmiennejSkładni
+=
można używać na różne sposoby:Dołącz do ciągu
var+=...
(Ponieważ jestem oszczędny, użyję tylko dwie zmienne
foo
ia
, a następnie ponownie użyć tego samego w całej odpowiedź. ;-)Używając składni pytania Przepełnienie stosu ,
działa w porządku!
Dołącz do liczby całkowitej
((var+=...))
zmienna
a
jest ciągiem, ale także liczbą całkowitąDołącz do tablicy
var+=(...)
Nasz
a
jest również tablicą tylko jednego elementu.Zauważ, że między nawiasami znajduje się tablica oddzielona spacjami . Jeśli chcesz zapisać ciąg zawierający spacje w tablicy, musisz je zawrzeć:
Hmm .. to nie jest błąd, ale funkcja ... Aby zapobiec bashowi, aby spróbować się rozwinąć
!"
, możesz:printf
: Ponownie konstruuj zmienną za pomocą wbudowanego poleceniaprintf
Wbudowane polecenie daje potężny sposób rysunek format string. Ponieważ jest to wbudowany Bash , istnieje możliwość wysłania sformatowanego ciągu do zmiennej zamiast drukowania nastdout
:W tej tablicy jest siedem ciągów . Więc możemy zbudować sformatowany ciąg zawierający dokładnie siedem argumentów pozycyjnych:
Lub możemy użyć jednego ciągu formatu argumentu, który będzie powtarzany przy liczbie przesłanych argumentów ...
Zauważ, że nasza
a
wciąż jest tablicą! Zmienia się tylko pierwszy element!W bash, kiedy uzyskujesz dostęp do nazwy zmiennej bez określania indeksu, zawsze adresujesz tylko pierwszy element!
Aby pobrać naszą tablicę siedmiu pól, wystarczy ponownie ustawić pierwszy element:
Ciąg formatu jednego argumentu z wieloma argumentami przekazanymi do:
Korzystanie ze składni pytania Przepełnienie stosu :
Nota: Zastosowanie podwójnych cudzysłowach mogą być użyteczne do manipulowania ciągi, które zawierają
spaces
,tabulations
i / lubnewlines
Shell teraz
Pod powłoką POSIX nie można było używać bashism , więc nie ma wbudowanego
printf
.Gruntownie
Ale możesz po prostu zrobić:
Sformatowane przy użyciu rozwidlenia
printf
Jeśli chcesz użyć bardziej wyrafinowanych konstrukcji, musisz użyć widelca (nowy proces potomny, który wykona zadanie i zwróci wynik
stdout
):Historycznie można było użyć backicks do pobrania wyniku rozwidlenia :
Nie jest to jednak łatwe do zagnieżdżenia :
z backtickami musisz uciec wewnętrznym widelcem z backslashes :
źródło
+=
Operator jest również o wiele szybciej niż$a="$a$b"
w moich testach .. Który ma sens.var=${var}.sh
przykładu z innych odpowiedzi, co jest bardzo przydatne.bash
jedyna powłoka z+=
operatorem? Chcę się przekonać, czy jest wystarczająco przenośny+=
operatorem, ale wszystkie te sposoby to bashizmy , więc nie przenośne! Nawet ty możesz napotkać specjalny błąd w przypadku niewłaściwej wersji bash!Możesz to również zrobić:
źródło
var=myscript;var=$var.sh;echo $var
miałyby takie same efekty (Działa w trybie bash, myślnik, busybox i innych).echo $var2
Nie produkujemyscript2
.
niedozwolonej kropki w nazwie zmiennej. Jeśli jeszczeecho ${var}2
lub zobacz moją odpowiedźWyjdzie
Jest to przydatne, gdy
$blaohai
prowadzi do błędu nie znaleziono zmiennej. Lub jeśli masz ciągi znaków lub inne znaki specjalne."${foo}"
właściwie ucieka przed wszystkim, co do niego włożysz.źródło
źródło
Sposób, w jaki rozwiązałem problem, jest po prostu
Na przykład,
który produkuje
Jeśli na przykład spróbujesz połączyć łańcuch z innym łańcuchem,
wtedy
echo "$c"
wyprodukujez dodatkową przestrzenią.
nie działa, jak możesz sobie wyobrazić, ale
produkuje
źródło
${a}\ World
produkujeHello World
c=$a$b
tutaj, że zrobię to samo, coc=$a World
(które spróbuje uruchomićWorld
jako polecenie). To chyba oznacza, że przypisanie jest analizowane przed rozwinięciem zmiennych.Oto zwięzłe podsumowanie tego, o czym mówi większość odpowiedzi.
Powiedzmy, że mamy dwie zmienne, a 1 $ jest ustawiony na „jeden”:
Poniższa tabela wyjaśnia różne konteksty, gdzie możemy połączyć z wartościami
a
ib
aby utworzyć nową zmienną,c
.Kilka uwag:
+=
jest lepszy z punktu widzenia wydajności, jeśli duży ciąg jest budowany małymi przyrostami, szczególnie w pętli{}
wokół nazw zmiennych, aby ujednoznacznić ich rozwinięcie (jak w wierszu 2 w powyższej tabeli). Jak widać w wierszach 3 i 4, nie ma potrzeby,{}
chyba że zmienna jest łączona z łańcuchem rozpoczynającym się od znaku, który jest prawidłowym pierwszym znakiem w nazwie zmiennej powłoki, czyli alfabet lub podkreślnik.Zobacz też:
źródło
źródło
Jeszcze inne podejście ...
... i jeszcze jeden.
źródło
Jeśli chcesz dołączyć coś w rodzaju podkreślenia, użyj klawisza Escape (\)
To nie działa:
Działa to dobrze:
źródło
echo $a\_$b
. Jak wskazano w komentarzu Nik O'Lai, podkreślenie jest regularną postacią. Obsługa białych znaków jest znacznie bardziej wrażliwa na ciągi znaków, echo i konkatenację - można używać\
tego wątku i czytać go dokładnie, ponieważ ten problem pojawia się od czasu do czasu.Najprostszy sposób ze znakami cudzysłowu:
źródło
var=$B$b"a"; echo Hello\ $var
zrobiłbym, wierzęMożesz konkatenować bez cudzysłowów. Oto przykład:
Ta ostatnia instrukcja wypisze „OpenSystems” (bez cudzysłowów).
To jest przykład skryptu Bash:
źródło
Nawet jeśli operator + = jest teraz dozwolony, został wprowadzony w wersji Bash 3.1 w 2004 roku.
Każdy skrypt używający tego operatora w starszych wersjach Bash nie powiedzie się z błędem „nie znaleziono polecenia”, jeśli masz szczęście lub „błędem składniowym w pobliżu nieoczekiwanego tokena”.
Dla tych, którym zależy na kompatybilności wstecznej, trzymaj się starszych standardowych metod konkatenacji Basha, takich jak te wymienione w wybranej odpowiedzi:
źródło
Wolę używać nawiasów klamrowych
${}
do rozwijania zmiennej w łańcuchu:Nawiasy klamrowe będą pasować do ciągłego użycia sznurka:
W przeciwnym razie korzystanie
foo = "$fooWorld"
nie będzie działać.źródło
Jeśli próbujesz podzielić łańcuch na kilka linii, możesz użyć odwrotnego ukośnika:
Z jednym odstępem pomiędzy:
Ten dodaje również tylko jedną spację między:
źródło
Bezpieczniejszy sposób:
Ciągi zawierające spacje mogą stać się częścią polecenia, użyj „$ XXX” i „$ {XXX}”, aby uniknąć tych błędów.
Plus spójrz na inną odpowiedź na temat + =
źródło
d=DD DD
Dałbym więcDD: command not found
--- zauważ, że jest to ostatni DD, a raczej d, że nie został znaleziony. Jeśli wszystkie operandy są poprawnie sformatowane i zawierają już wymagane spacje, możesz po prostu połączyć jes=${a}${b}${c}${d}; echo $s
z mniejszymi znakami cudzysłowu. Możesz także użyć\
(klawisz Escape), aby uniknąć tych problemów ---d=echo\ echo
nie uruchomi żadnego wywołania echa, podczas gdyd=echo echo
będzie.Jest jeden szczególny przypadek, w którym powinieneś zachować ostrożność:
Wyjdzie
"daniel"san
, a niedanielsan
tak, jak mogłeś chcieć. W takim przypadku powinieneś zamiast tego zrobić:źródło
W ten sposób łączysz dwa łańcuchy.
źródło
Jeśli jest to przykład dodawania
" World"
do oryginalnego ciągu znaków, może to być:Wyjście:
źródło
źródło
var3=$var1\ $var2
Ma również ten sam efektIstnieją obawy dotyczące wydajności, ale dane nie są oferowane. Pozwól, że zasugeruję prosty test.
(UWAGA:
date
w systemie macOS nie oferuje nanosekund, więc należy to zrobić w systemie Linux).Utworzyłem append_test.sh na GitHub z zawartością:
Test 1:
Test 2:
Błędy wskazują, że mój Bash dostał się do 335,54432 MB, zanim się zawiesił . Możesz zmienić kod z podwojenia danych na dodawanie stałej, aby uzyskać bardziej szczegółowy wykres i punkt awarii. Ale myślę, że powinno to dać ci wystarczającą ilość informacji, aby zdecydować, czy cię to obchodzi. Osobiście poniżej 100 MB nie. Twój przebieg może się różnić.
źródło
join <(LANG=C bash -c 'a="a" c=1 last=${EPOCHREALTIME//.};while :;do a+=$a;now=${EPOCHREALTIME//.};echo $((c++)) ${#a} $((now-last));last=$now;done') <(LANG=C bash -c 'a="a" c=1 last=${EPOCHREALTIME//.};while :;do a=$a$a;now=${EPOCHREALTIME//.};echo $((c++)) ${#a} $((now-last));last=$now;done')|sed -ue '1icnt strlen a+=$a a=$a$a' -e 's/^\([0-9]\+\) \([0-9]\+\) \([0-9]\+\) \2/\1 \2 \3/' | xargs printf "%4s %11s %9s %9s\n"
(Spróbuj tego na nieproduktywnym gospodarzu !!;)Chciałem zbudować ciąg z listy. Nie mogłem znaleźć na to odpowiedzi, więc opublikowałem ją tutaj. Oto co zrobiłem:
a następnie otrzymuję następujące dane wyjściowe:
źródło
Pomimo specjalnego operatora,
+=
w przypadku konkatenacji istnieje prostszy sposób:Podwójne cudzysłowy wymagają dodatkowego czasu obliczeniowego na interpretację zmiennych wewnątrz. Unikaj tego, jeśli to możliwe.
źródło
Pamiętaj, że to nie zadziała
wydaje się, że upuszcza $ foo i pozostawia:
ale to zadziała:
i zostawić prawidłowe wyjście:
źródło
Oto jeden z AWK :
źródło
Robię to w wygodny sposób: użyj polecenia wbudowanego!
źródło
date "+The current time is %a %b %d %Y +%T"
zamiastecho ...$(date)
. Zgodnie z niedawnym bash, można napisać:printf "The current time is %(%a %b %d %Y +%T)T\n" -1
.Moim zdaniem najprostszym sposobem na połączenie dwóch łańcuchów jest napisanie funkcji, która zrobi to za Ciebie, a następnie użycie tej funkcji.
źródło
Lubię tworzyć szybką funkcję.
Jeszcze inny sposób na skórowanie kota. Tym razem z funkcjami: D
źródło
Nie wiem jeszcze o PHP, ale działa to w Linux Bash. Jeśli nie chcesz wpływać na zmienną, możesz spróbować:
Możesz umieścić inną zmienną zamiast „Witaj” lub „!”. Możesz także połączyć więcej łańcuchów.
źródło