Apa yang ditampilkan gema $ -1?


14

Apa output dari echo $-1, echo $-2, echo $-3.. artinya?

Di salah satu kotak Linux saya, itu menunjukkan kepada saya:

echo $-1
imsBEl1
echo $-2
imsBEl2

Dan pada kotak Linux lain, itu menunjukkan:

echo $-1
himBH1
echo $-2
himBH2

Apakah mereka memetakan ke beberapa lokasi memori atau sesuatu yang lain?


1
Judul menunjukkan masalah berikut di bilah sisi: meta.stackexchange.com/q/229363/205964
IQAndreas

Saya menambahkan edit yang diusulkan yang mencoba memperbaikinya, tetapi saya segera menyadari bahwa hanya bilah sisi yang merender MathJax, yang berarti bahwa ketika judulnya ada di halaman ini, hanya akan terjadi backslash yang tidak perlu.
IQAndreas

Jawaban:


19

POSIX mendefinisikan $ - sebagai:

-

(Tanda hubung.) Memperluas ke flag opsi saat ini (nama opsi huruf tunggal disatukan menjadi string) seperti yang ditentukan pada doa, dengan perintah built-in khusus yang ditetapkan, atau secara implisit oleh shell.

Jadi $-bisa berbeda pangkalan di shell Anda atau bagaimana Anda memintanya.

1atau 2dipisahkan token di sini. Ketika shell melihat tanda kutip $, itu akan mengidentifikasi awal dari setiap kandidat untuk ekspansi parameter, penggantian perintah, atau ekspansi aritmatika. Ia melihat $-dan mengembangkannya, membiarkan sisanya tidak berubah.

Anda dapat melihat bagian Pengakuan Token untuk lebih jelasnya.


18

echo $- mencetak opsi shell saat ini (tanpa - awalan). 1dan 2merupakan token yang tidak terkait tambahan.


11

Menambahkan ke jawaban Miroslav:

echo $-mencetak opsi shell saat ini (tanpa -awalan). 1 dan 2 adalah token tambahan yang tidak terkait.

Ini berarti bahwa ini adalah opsi, untuk masing-masing mesin.

imsBEl
himBH

Saya telah meneliti makna dari setiap bendera dan menyusun maknanya di bawah ini, dengan parafrase kecil.

-saya

Jika opsi -i ada, shell bersifat interaktif.

-m

Mode monitor. Kontrol pekerjaan diaktifkan.

-B

Shell melakukan ekspansi brace ( lihat Ekspansi Brace ). Ini aktif secara default.

-s

Jika opsi -s hadir, atau jika tidak ada argumen yang tersisa setelah pemrosesan opsi, maka perintah dibaca dari input standar. Opsi ini memungkinkan parameter posisi diatur ketika menjalankan shell interaktif.

-E

errtrace

-l

Buat bash bertindak seolah-olah itu telah dipanggil sebagai shell login

-h

hashall

Ekspansi Sejarah -H

Fitur ini diaktifkan secara default untuk shell interaktif.


3

Untuk memperluas jawaban yang ada, coba echo "${-1}"dan echo "${-2}"- Anda akan mendapatkan kesalahan "Substitusi buruk" karena alih-alih menggunakan -1sebagai nama variabel, tanda hubung digunakan untuk mengganti nilai jika nama variabel sebelum tidak ditentukan. Sebagai contoh:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.