Mungkin bagus untuk membiasakan diri memasukkan $footanda kutip ganda, untuk saat-saat ketika itu benar-benar penting.
Cascabel
104
Kami diajarkan untuk selalu melakukan itu karena ketika pergantian berlangsung, ruang akan diabaikan oleh shell, tetapi tanda kutip ganda akan selalu melindungi ruang tersebut.
Strawberry
62
Apakah harus ada spasi dalam contoh pertama Anda? Apakah mungkin untuk melakukan sesuatu seperti itu foo="$fooworld"? Saya akan berasumsi tidak ...
nonsensickle
341
@nonsensickle Itu akan mencari variabel bernama fooworld. Mengacaukan yang dilakukan dengan kawat gigi, seperti pada foo="${foo}world"...
twalberg
4
@ JVE999 Ya, itu bekerja juga, meskipun menurut saya itu tidak cukup baik untuk kejelasan kode ... Tapi itu mungkin hanya preferensi saya ... Ada beberapa cara lain yang dapat dilakukan juga - intinya adalah pastikan nama variabel dipisahkan dari bagian-bagian yang tidak-variabel-nama sehingga mem-parsing dengan benar.
twalberg
1128
Bash juga mendukung +=operator seperti yang ditunjukkan dalam kode ini:
Bisakah saya menggunakan sintaks ini dengan kata kunci ekspor? misalnya export A+="Z"atau mungkin Avariabel hanya perlu diekspor sekali?
levesque
3
@levesque: Keduanya :-). Variabel hanya perlu diekspor sekali, tetapi export A+=Zberfungsi dengan cukup baik.
thkala
38
Karena ini adalah bashism, saya pikir patut disebutkan bahwa Anda tidak boleh menggunakan #!/bin/shskrip menggunakan konstruksi ini.
Score_Under
2
Ini khusus dan hanya operator plus-sama. Artinya, tidak seperti Javascript, dalam Bash, gema $ A + $ B mencetak "X Y + Z"
phpguru
6
Bashism adalah fitur shell yang hanya didukung bashdan beberapa shell yang lebih canggih lainnya. Ini tidak akan berfungsi di bawah busybox shatau dash(yang ada /bin/shdi banyak distro), atau shell lain seperti yang /bin/shdisediakan di FreeBSD.
Score_Under
960
Bash dulu
Karena pertanyaan ini khusus untuk Bash , bagian pertama dari jawaban saya akan menyajikan berbagai cara untuk melakukan ini dengan benar:
+=: Tambahkan ke variabel
Sintaks +=dapat digunakan dengan berbagai cara:
Tambahkan ke string var+=...
(Karena saya hemat, saya hanya akan menggunakan dua variabel foodan akemudian kembali menggunakan yang sama di seluruh jawaban. ;-)
a=2
a+=4
echo $a
24
Menggunakan sintaks pertanyaan Stack Overflow ,
foo="Hello"
foo+=" World"
echo $foo
HelloWorld
bekerja dengan baik!
Tambahkan ke bilangan bulat ((var+=...))
variabel aadalah string, tetapi juga bilangan bulat
echo $a
24((a+=12))
echo $a
36
Tambahkan ke array var+=(...)
Kami ajuga merupakan array dari hanya satu elemen.
Perhatikan bahwa di antara tanda kurung, ada array yang dipisahkan spasi . Jika Anda ingin menyimpan string yang berisi spasi di array Anda, Anda harus melampirkannya:
a+=(one word "hello world!")
bash:!": event not found
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: Membangun ulang variabel menggunakan builtin perintah
The printfbuiltin perintah memberikan cara yang ampuh untuk menggambar format string. Karena ini adalah Bash bawaan , ada opsi untuk mengirim string yang diformat ke variabel alih-alih mencetak stdout:
echo ${a[@]}3618 one word hello world! hello world! hello world!
Ada tujuh string dalam array ini. Jadi kita bisa membangun string yang diformat yang mengandung tujuh argumen posisi:
Catatan: Penggunaan tanda kutip ganda mungkin berguna untuk memanipulasi string yang berisi spaces, tabulationsdan / ataunewlines
printf -v foo "%s World""$foo"
Shell sekarang
Di bawah shell POSIX , Anda tidak dapat menggunakan bashism , jadi tidak ada builtinprintf .
Pada dasarnya
Tapi Anda bisa melakukannya:
foo="Hello"
foo="$foo World"
echo $foo
HelloWorld
Diformat, menggunakan forkedprintf
Jika Anda ingin menggunakan konstruksi yang lebih canggih, Anda harus menggunakan garpu (proses anak baru yang menghasilkan pekerjaan dan mengembalikan hasilnya melalui stdout):
The +=Operator juga jauh lebih cepat daripada $a="$a$b"di tes saya .. Yang masuk akal.
Matt
7
Jawaban ini luar biasa, tetapi saya pikir itu kehilangan var=${var}.shcontoh dari jawaban lain, yang sangat berguna.
geneorama
1
Apakah bashsatu-satunya shell dengan +=operator? Saya ingin melihat apakah ini cukup portabel
dashesy
1
@ bulu mata tidak. Saya jelas bukan satu-satunya shell dengan +=operator, tetapi semua cara ini adalah bashism , jadi tidak portabel! Bahkan Anda dapat menemukan bug khusus jika versi bash salah!
Meskipun tidak ada karakter khusus, spasi tidak digunakan, tanda kutip ganda, tanda kutip dan kurung keriting tidak berguna: var=myscript;var=$var.sh;echo $varakan memiliki efek yang sama (Ini bekerja di bawah bash, tanda hubung, kotak sibuk dan lain-lain).
F. Hauri
@ F. Hauri terima kasih telah menunjukkannya. Tetapi jika Anda menambahkan nomor, itu tidak akan berfungsi: misalnya echo $var2tidak menghasilkanmyscript2
Pynchia
@Pynchia Ini berfungsi karena titik .ilegal pada nama variabel. Jika lain echo ${var}2atau lihat jawaban saya
F. Hauri
119
bla=hello
laber=kthx
echo "${bla}ohai${laber}bye"
Akan menghasilkan
helloohaikthxbye
Ini berguna ketika
$blaohai
mengarah ke variabel tidak ditemukan kesalahan. Atau jika Anda memiliki spasi atau karakter khusus lainnya di string Anda. "${foo}"benar lolos apa pun yang Anda masukkan ke dalamnya.
Ini adalah jawaban yang paling berguna untuk skrip shell. Saya telah menemukan diri saya 30 menit terakhir karena saya memiliki ruang sebelum dan sesudah tanda sama !!
Stefan
8
foo = "$ {foo} Dunia"
XXL
@XXL pasti saya lebih suka menggunakan tanda kurung untuk merangkum nama var. Sangat direkomendasikan
Sergio A.
33
Cara saya memecahkan masalah itu adil
$a$b
Sebagai contoh,
a="Hello"
b=" World"
c=$a$b
echo "$c"
yang menghasilkan
HelloWorld
Jika Anda mencoba menggabungkan string dengan string lain, misalnya,
a="Hello"
c="$a World"
maka echo "$c"akan menghasilkan
HelloWorld
dengan ruang ekstra.
$aWorld
tidak bekerja, seperti yang Anda bayangkan, tetapi
Ini mengejutkan saya; Saya akan berharap di c=$a$bsini untuk melakukan hal yang sama c=$a World(yang akan mencoba dijalankan Worldsebagai perintah). Saya kira itu berarti tugas diuraikan sebelum variabel diperluas ..
mwfearnley
31
Berikut ini ringkasan singkat dari apa yang dibicarakan oleh sebagian besar jawaban.
Katakanlah kita memiliki dua variabel dan $ 1 diatur ke 'satu':
set one two
a=hello
b=world
Tabel di bawah ini menjelaskan berbagai konteks di mana kita dapat menggabungkan nilai adan buntuk membuat variabel baru 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
Beberapa catatan:
melampirkan RHS suatu tugas dalam tanda kutip ganda biasanya merupakan praktik yang baik, meskipun dalam banyak kasus cukup opsional
+= lebih baik dari sudut pandang kinerja jika string besar sedang dibangun dalam peningkatan kecil, terutama dalam satu lingkaran
gunakan {}sekitar nama variabel untuk mendisambiguasikan ekspansi mereka (seperti pada baris 2 pada tabel di atas). Seperti terlihat pada baris 3 dan 4, tidak perlu {}kecuali variabel sedang digabungkan dengan string yang dimulai dengan karakter yang merupakan karakter pertama yang valid dalam nama variabel shell, yaitu alfabet atau garis bawah.
Itulah yang saya lakukan, dan saya menemukan itu sangat sederhana dan mudah daripada jawaban lainnya. Apakah ada alasan mengapa tidak ada orang di jawaban yang paling banyak memilih opsi ini?
quimnuss
1
@quimnuss Fakta bahwa string tidak cocok dengan yang digunakan dalam pertanyaan OP mungkin menjadi alasan yang bagus.
jlliagre
20
Jika Anda ingin menambahkan sesuatu seperti garis bawah, gunakan escape (\)
Atau sebagai alternatif, $ {FILEPATH} _ $ DATEX. Di sini {} digunakan untuk menunjukkan batas-batas nama variabel. Ini tepat karena garis bawah adalah karakter hukum dalam nama variabel, jadi di bash cuplikan Anda sebenarnya mencoba menyelesaikan FILEPATH_, bukan hanya $ FILEPATH
Nik O'Lai
1
untuk saya, saya punya satu variabel yaitu $ var1 dan konstan di sebelahnya, jadi echo $ var1_costant_traling_part bekerja untuk saya
YouAreAwesome
2
Saya kira orang hanya perlu satu serangan balasan untuk melarikan diri: echo $a\_$bakan dilakukan. Seperti yang diisyaratkan dalam komentar Nik O'Lai, garis bawah adalah karakter biasa. Penanganan ruang putih jauh lebih sensitif untuk string, gema dan rangkaian --- seseorang dapat menggunakan \ dan membaca utas ini secara menyeluruh karena masalah ini muncul kembali sekarang dan kemudian.
Terlalu banyak tanda kutip, IMHO. var=$B$b"a"; echo Hello\ $varakan melakukan, saya percaya
XavierStuvw
Saya sarankan untuk menggunakan semua tanda kutip, karena jika Anda meletakkannya di mana-mana Anda tidak boleh ketinggalan, Anda tidak perlu berpikir.
betontalpfa
15
Anda dapat menggabungkan tanpa tanda kutip. Berikut ini sebuah contoh:
$Variable1 Open
$Variable2 Systems
$Variable3 $Variable1$Variable2
$echo $Variable3
Pernyataan terakhir ini akan mencetak "OpenSystems" (tanpa tanda kutip).
Ini adalah contoh skrip Bash:
v1=hello
v2=world
v3="$v1 $v2"
echo $v3 # Output: hello world
echo "$v3"# Output: hello world
Sintaks dari blok pertama membingungkan. Apa arti $ tanda ini?
XavierStuvw
15
Bahkan jika operator + = sekarang diizinkan, ia telah diperkenalkan di Bash 3.1 pada tahun 2004.
Setiap skrip yang menggunakan operator ini pada versi Bash yang lebih lama akan gagal dengan kesalahan "perintah tidak ditemukan" jika Anda beruntung, atau "kesalahan sintaksis dekat token yang tidak terduga".
Bagi mereka yang peduli tentang kompatibilitas ke belakang, tetap menggunakan metode penggabungan Bash standar yang lebih lama, seperti yang disebutkan dalam jawaban yang dipilih:
Titik string dengan spasi yang dibaca sebagai perintah muncul di titik definisi. Jadi d=DD DDakan memberikan DD: command not found--- perhatikan itu adalah DD terakhir, bukan d yang tidak ditemukan. Jika semua operan diformat dengan benar dan sudah berisi ruang yang diperlukan, Anda dapat menyatukan dengan s=${a}${b}${c}${d}; echo $s, dengan sedikit tanda kutip. Anda juga dapat menggunakan \ (escaped whitespace) untuk menghindari masalah ini --- d=echo\ echotidak akan meluncurkan permintaan gema, sedangkan d=echo echoakan.
XavierStuvw
7
Ada satu kasus khusus di mana Anda harus berhati-hati:
Ini berfungsi, tetapi kadang-kadang akan menghasilkan hasil yang tidak terduga karena interpolasi variabel tidak dilindungi. Dengan demikian, Anda tidak bisa mengandalkan formulir ini untuk semua kasus penggunaan.
Anthony Rutledge
5
Jika itu sebagai contoh Anda menambahkan " World"ke string asli, maka itu bisa:
Kesalahan menunjukkan bahwa Bash saya hingga 335.54432 MB sebelum crash. Anda bisa mengubah kode dari menggandakan data menjadi menambahkan konstanta untuk mendapatkan grafik yang lebih terperinci dan titik kegagalan. Tapi saya pikir ini harus memberi Anda informasi yang cukup untuk memutuskan apakah Anda peduli. Secara pribadi, di bawah 100 MB saya tidak. Jarak tempuh Anda mungkin beragam.
ini terjadi karena garis bawah adalah karakter yang valid dalam nama variabel, jadi bash melihat foo_ sebagai variabel. Bila perlu untuk memberi tahu bash batas-batas nama var yang tepat, kurung kurawal dapat digunakan: PREFIX _ $ {foo} _ $ bar
Pada baris pertama, Anda bisa menjatuhkan garpu dengan menggunakan date "+The current time is %a %b %d %Y +%T":, bukan echo ...$(date). Under bash baru-baru ini, Anda bisa menulis: printf "The current time is %(%a %b %d %Y +%T)T\n" -1.
F. Hauri
1
Menurut pendapat saya, cara paling sederhana untuk menggabungkan dua string adalah dengan menulis fungsi yang melakukannya untuk Anda, lalu gunakan fungsi itu.
foo="Hello"
foo=$foo" World"
echo $foo
ini agak berhasil untuk "#! / bin / sh"foo1="World" foo2="Hello" foo3="$foo1$foo2"
Jawaban:
Secara umum untuk menggabungkan dua variabel, Anda cukup menuliskannya satu per satu:
sumber
$foo
tanda kutip ganda, untuk saat-saat ketika itu benar-benar penting.foo="$fooworld"
? Saya akan berasumsi tidak ...fooworld
. Mengacaukan yang dilakukan dengan kawat gigi, seperti padafoo="${foo}world"
...Bash juga mendukung
+=
operator seperti yang ditunjukkan dalam kode ini:sumber
export A+="Z"
atau mungkinA
variabel hanya perlu diekspor sekali?export A+=Z
berfungsi dengan cukup baik.#!/bin/sh
skrip menggunakan konstruksi ini.bash
dan beberapa shell yang lebih canggih lainnya. Ini tidak akan berfungsi di bawahbusybox sh
ataudash
(yang ada/bin/sh
di banyak distro), atau shell lain seperti yang/bin/sh
disediakan di FreeBSD.Bash dulu
Karena pertanyaan ini khusus untuk Bash , bagian pertama dari jawaban saya akan menyajikan berbagai cara untuk melakukan ini dengan benar:
+=
: Tambahkan ke variabelSintaks
+=
dapat digunakan dengan berbagai cara:Tambahkan ke string
var+=...
(Karena saya hemat, saya hanya akan menggunakan dua variabel
foo
dana
kemudian kembali menggunakan yang sama di seluruh jawaban. ;-)Menggunakan sintaks pertanyaan Stack Overflow ,
bekerja dengan baik!
Tambahkan ke bilangan bulat
((var+=...))
variabel
a
adalah string, tetapi juga bilangan bulatTambahkan ke array
var+=(...)
Kami
a
juga merupakan array dari hanya satu elemen.Perhatikan bahwa di antara tanda kurung, ada array yang dipisahkan spasi . Jika Anda ingin menyimpan string yang berisi spasi di array Anda, Anda harus melampirkannya:
Hmm .. ini bukan bug, tetapi fitur ... Untuk mencegah bash mencoba dikembangkan
!"
, Anda dapat:printf
: Membangun ulang variabel menggunakan builtin perintahThe
printf
builtin perintah memberikan cara yang ampuh untuk menggambar format string. Karena ini adalah Bash bawaan , ada opsi untuk mengirim string yang diformat ke variabel alih-alih mencetakstdout
:Ada tujuh string dalam array ini. Jadi kita bisa membangun string yang diformat yang mengandung tujuh argumen posisi:
Atau kita bisa menggunakan satu string format argumen yang akan diulang karena banyak argumen yang diajukan ...
Perhatikan bahwa kami
a
masih berupa array! Hanya elemen pertama yang diubah!Di bawah bash, ketika Anda mengakses nama variabel tanpa menentukan indeks, Anda selalu membahas elemen pertama saja!
Jadi untuk mengambil tujuh array bidang, kita hanya perlu mengatur ulang elemen 1:
Satu string format argumen dengan banyak argumen diteruskan ke:
Menggunakan sintaks pertanyaan Stack Overflow :
Catatan: Penggunaan tanda kutip ganda mungkin berguna untuk memanipulasi string yang berisi
spaces
,tabulations
dan / ataunewlines
Shell sekarang
Di bawah shell POSIX , Anda tidak dapat menggunakan bashism , jadi tidak ada builtin
printf
.Pada dasarnya
Tapi Anda bisa melakukannya:
Diformat, menggunakan forked
printf
Jika Anda ingin menggunakan konstruksi yang lebih canggih, Anda harus menggunakan garpu (proses anak baru yang menghasilkan pekerjaan dan mengembalikan hasilnya melalui
stdout
):Secara historis, Anda bisa menggunakan backtick untuk mengambil hasil dari fork :
Tapi ini tidak mudah untuk bersarang :
dengan backticks, Anda harus melarikan diri dari garpu dalam dengan garis miring terbalik :
sumber
+=
Operator juga jauh lebih cepat daripada$a="$a$b"
di tes saya .. Yang masuk akal.var=${var}.sh
contoh dari jawaban lain, yang sangat berguna.bash
satu-satunya shell dengan+=
operator? Saya ingin melihat apakah ini cukup portabel+=
operator, tetapi semua cara ini adalah bashism , jadi tidak portabel! Bahkan Anda dapat menemukan bug khusus jika versi bash salah!Anda juga dapat melakukan ini:
sumber
var=myscript;var=$var.sh;echo $var
akan memiliki efek yang sama (Ini bekerja di bawah bash, tanda hubung, kotak sibuk dan lain-lain).echo $var2
tidak menghasilkanmyscript2
.
ilegal pada nama variabel. Jika lainecho ${var}2
atau lihat jawaban sayaAkan menghasilkan
Ini berguna ketika
$blaohai
mengarah ke variabel tidak ditemukan kesalahan. Atau jika Anda memiliki spasi atau karakter khusus lainnya di string Anda."${foo}"
benar lolos apa pun yang Anda masukkan ke dalamnya.sumber
sumber
Cara saya memecahkan masalah itu adil
Sebagai contoh,
yang menghasilkan
Jika Anda mencoba menggabungkan string dengan string lain, misalnya,
maka
echo "$c"
akan menghasilkandengan ruang ekstra.
tidak bekerja, seperti yang Anda bayangkan, tetapi
menghasilkan
sumber
${a}\ World
menghasilkanHello World
c=$a$b
sini untuk melakukan hal yang samac=$a World
(yang akan mencoba dijalankanWorld
sebagai perintah). Saya kira itu berarti tugas diuraikan sebelum variabel diperluas ..Berikut ini ringkasan singkat dari apa yang dibicarakan oleh sebagian besar jawaban.
Katakanlah kita memiliki dua variabel dan $ 1 diatur ke 'satu':
Tabel di bawah ini menjelaskan berbagai konteks di mana kita dapat menggabungkan nilai
a
danb
untuk membuat variabel baruc
,.Beberapa catatan:
+=
lebih baik dari sudut pandang kinerja jika string besar sedang dibangun dalam peningkatan kecil, terutama dalam satu lingkaran{}
sekitar nama variabel untuk mendisambiguasikan ekspansi mereka (seperti pada baris 2 pada tabel di atas). Seperti terlihat pada baris 3 dan 4, tidak perlu{}
kecuali variabel sedang digabungkan dengan string yang dimulai dengan karakter yang merupakan karakter pertama yang valid dalam nama variabel shell, yaitu alfabet atau garis bawah.Lihat juga:
sumber
sumber
Namun pendekatan lain ...
... dan satu lagi.
sumber
Jika Anda ingin menambahkan sesuatu seperti garis bawah, gunakan escape (\)
Ini tidak berfungsi:
Ini berfungsi dengan baik:
sumber
echo $a\_$b
akan dilakukan. Seperti yang diisyaratkan dalam komentar Nik O'Lai, garis bawah adalah karakter biasa. Penanganan ruang putih jauh lebih sensitif untuk string, gema dan rangkaian --- seseorang dapat menggunakan\
dan membaca utas ini secara menyeluruh karena masalah ini muncul kembali sekarang dan kemudian.Cara paling sederhana dengan tanda kutip:
sumber
var=$B$b"a"; echo Hello\ $var
akan melakukan, saya percayaAnda dapat menggabungkan tanpa tanda kutip. Berikut ini sebuah contoh:
Pernyataan terakhir ini akan mencetak "OpenSystems" (tanpa tanda kutip).
Ini adalah contoh skrip Bash:
sumber
Bahkan jika operator + = sekarang diizinkan, ia telah diperkenalkan di Bash 3.1 pada tahun 2004.
Setiap skrip yang menggunakan operator ini pada versi Bash yang lebih lama akan gagal dengan kesalahan "perintah tidak ditemukan" jika Anda beruntung, atau "kesalahan sintaksis dekat token yang tidak terduga".
Bagi mereka yang peduli tentang kompatibilitas ke belakang, tetap menggunakan metode penggabungan Bash standar yang lebih lama, seperti yang disebutkan dalam jawaban yang dipilih:
sumber
Saya lebih suka menggunakan kurung keriting
${}
untuk memperluas variabel dalam string:Kurung keriting akan cocok dengan penggunaan string Berkelanjutan:
Kalau tidak menggunakan
foo = "$fooWorld"
tidak akan berfungsi.sumber
Jika yang ingin Anda lakukan adalah membagi string menjadi beberapa baris, Anda dapat menggunakan garis miring terbalik:
Dengan satu ruang di antaranya:
Yang ini juga menambahkan hanya satu ruang di antara:
sumber
Cara yang lebih aman:
String yang berisi spasi dapat menjadi bagian dari perintah, gunakan "$ XXX" dan "$ {XXX}" untuk menghindari kesalahan ini.
Plus lihat jawaban lain tentang + =
sumber
d=DD DD
akan memberikanDD: command not found
--- perhatikan itu adalah DD terakhir, bukan d yang tidak ditemukan. Jika semua operan diformat dengan benar dan sudah berisi ruang yang diperlukan, Anda dapat menyatukan dengans=${a}${b}${c}${d}; echo $s
, dengan sedikit tanda kutip. Anda juga dapat menggunakan\
(escaped whitespace) untuk menghindari masalah ini ---d=echo\ echo
tidak akan meluncurkan permintaan gema, sedangkand=echo echo
akan.Ada satu kasus khusus di mana Anda harus berhati-hati:
Akan menampilkan
"daniel"san
, dan tidakdanielsan
, seperti yang Anda inginkan. Dalam hal ini yang harus Anda lakukan sebagai gantinya:sumber
Ini adalah bagaimana Anda menggabungkan dua string.
sumber
Jika itu sebagai contoh Anda menambahkan
" World"
ke string asli, maka itu bisa:Hasil:
sumber
sumber
var3=$var1\ $var2
memiliki efek yang samaAda kekhawatiran yang disuarakan tentang kinerja, tetapi tidak ada data yang ditawarkan. Izinkan saya menyarankan tes sederhana.
(CATATAN:
date
pada macOS tidak menawarkan nanodetik, jadi ini harus dilakukan di Linux.)Saya telah membuat append_test.sh di GitHub dengan konten:
Tes 1:
Tes 2:
Kesalahan menunjukkan bahwa Bash saya hingga 335.54432 MB sebelum crash. Anda bisa mengubah kode dari menggandakan data menjadi menambahkan konstanta untuk mendapatkan grafik yang lebih terperinci dan titik kegagalan. Tapi saya pikir ini harus memberi Anda informasi yang cukup untuk memutuskan apakah Anda peduli. Secara pribadi, di bawah 100 MB saya tidak. Jarak tempuh Anda mungkin beragam.
sumber
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"
(Coba ini pada host yang tidak produktif !!;)Saya ingin membuat string dari daftar. Tidak dapat menemukan jawaban untuk itu sehingga saya mempostingnya di sini. Inilah yang saya lakukan:
dan kemudian saya mendapatkan output berikut:
sumber
Terlepas dari operator khusus
+=
, untuk penggabungan, ada cara yang lebih mudah:Kutipan ganda membutuhkan waktu perhitungan ekstra untuk interpretasi variabel di dalamnya. Hindari jika memungkinkan.
sumber
Perhatikan bahwa ini tidak akan berhasil
karena tampaknya menjatuhkan $ foo dan meninggalkan Anda dengan:
tetapi ini akan berhasil:
dan meninggalkan Anda dengan output yang benar:
sumber
Inilah yang melalui AWK :
sumber
Saya melakukannya dengan cara ini ketika nyaman: Gunakan perintah inline!
sumber
date "+The current time is %a %b %d %Y +%T"
:, bukanecho ...$(date)
. Under bash baru-baru ini, Anda bisa menulis:printf "The current time is %(%a %b %d %Y +%T)T\n" -1
.Menurut pendapat saya, cara paling sederhana untuk menggabungkan dua string adalah dengan menulis fungsi yang melakukannya untuk Anda, lalu gunakan fungsi itu.
sumber
Saya agak suka membuat fungsi cepat.
Namun cara lain untuk menguliti kucing. Kali ini dengan fungsi: D
sumber
Saya belum tahu tentang PHP, tetapi ini bekerja di Linux Bash. Jika Anda tidak ingin memengaruhi variabel, Anda dapat mencoba ini:
Anda dapat menempatkan variabel lain alih-alih 'Halo' atau '!'. Anda dapat menggabungkan lebih banyak string juga.
sumber