Kapan kami menggunakan set -k
opsi dalam bash?
Manual referensi Bash mengatakan,
Semua argumen dalam bentuk pernyataan penugasan ditempatkan di lingkungan untuk suatu perintah, bukan hanya yang mendahului nama perintah.
Saya mengerti apa pilihannya, tetapi tidak bisa membayangkan kapan kami membutuhkannya.
-k
memungkinkan kita untuk menjalankan skrip shell berusia 30 tahun tanpa perlu refactor. Lewati variabel lingkungan sementara menggunakan sintaks awalan sebagai gantinya:var1=x var2=y command ...
Jawaban:
Anda pada dasarnya dapat menggunakannya kapan saja Anda ingin "menyuntikkan" variabel lingkungan yang dilewatkan ke dalam skrip shell (sebagai argumen) seolah-olah mereka ditetapkan dalam lingkungan melalui
export
, tetapi tanpa harus memilikinya secara permanen berada diexport
daftar sebelum menjalankan perintah .CATATAN: Ada juga bentuk
-k
saklar yang panjangset -o keyword
,.Contoh
Sekarang jika saya
set -k
:Tetapi jika saya menjalankan skrip di atas:
Apa yang ekspor lakukan?
Jadi jika kita ingin menambahkan
export | grep VAR
skrip kita seperti ini:Dan kami menjalankan tes kami di atas lagi:
Tapi tanpa
set -k
:Jadi
set -k
memungkinkan kita untuk sementara mengekspor variabel secara massal.Contoh lain
Ketika kami menetapkan beberapa variabel, mereka semua diekspor:
Jadi itu hanya menyuntikkan semua variabel lingkungan?
Tidak
-k
adalah melakukan hal yang sangat eksplisit di sini. Itu hanya mengekspor variabel yang dimasukkan pada baris perintah ketika perintah dieksekusi.Contoh
Katakanlah saya menetapkan variabel ini:
Sekarang ketika kita menjalankan perintah yang sama menghilangkan
VARCMD1="hi"
:Tetapi mengapa ini ada?
Saya menemukan sumber ini yang menjelaskan sedikit tentang fitur ini, berjudul: "Strings Assignment Parameter Kata Kunci". CATATAN: URL sumber menggunakan alamat IP sehingga saya tidak dapat menautkannya langsung di sini di SE.
sumber
set -k
mereka telah memberikan opsi-o keyword
selain-k
. Apakah itu berarti sesuatu?set -o keyword
adalah bentuk panjang dariset -k
. Lihathelp set | grep -- '-k'
../cmd.bash VARCMD=hi
perluset -k
membuatnya berfungsi persis seperti yangVARCMD=hi ./cmd.bash
dilakukan tanpaset -k
. Tebak pertanyaan khusus OP adalah seputar perlunya bash untuk mendukung./cmd.bash VARCMD=hi
formulirPenggunaan praktis apa
set -k
pun mungkin hanya gaya pribadi. Beberapa - mungkin mereka yang menyukai bahasa pemrograman yang menawarkan kemampuan untuk menggunakan argumen kata kunci dalam panggilan fungsi, atau beberapa orang yang menyukaidd
sintaksis perintah - mungkin lebih sukauntuk
Alasan sebenarnya opsi ada di beberapa shell dijelaskan dalam alasan untuk perintah yang ditetapkan dalam standar POSIX :
sumber