Không hiển thị $ -1 hiển thị gì?


14

Không đầu ra của những gì echo $-1, echo $-2, echo $-3.. nghĩa là gì?

Trên một trong các hộp Linux của tôi, nó hiển thị cho tôi:

echo $-1
imsBEl1
echo $-2
imsBEl2

Và trên một hộp Linux khác, nó hiển thị:

echo $-1
himBH1
echo $-2
himBH2

Có phải chúng ánh xạ tới một số vị trí bộ nhớ hoặc một số thứ khác?


1
Tiêu đề đang thể hiện vấn đề sau trong thanh bên: meta.stackexchange.com/q/229363/205964
IQAndreas

Tôi đã thêm một chỉnh sửa được đề xuất để cố gắng sửa nó, nhưng tôi sớm nhận ra rằng đó chỉ là thanh bên hiển thị MathJax, có nghĩa là khi tiêu đề nằm trên trang này, nó chỉ bị dấu gạch chéo không cần thiết.
IQAndreas

Câu trả lời:


19

POSIX định nghĩa $ - là:

-

(Dấu gạch nối.) Mở rộng sang các cờ tùy chọn hiện tại (tên tùy chọn một chữ cái được nối vào một chuỗi) như được chỉ định trong lệnh gọi, bằng cách đặt lệnh tích hợp đặc biệt hoặc ẩn bởi trình bao.

Vì vậy, $-có thể là cơ sở khác nhau trên vỏ của bạn hoặc cách bạn gọi nó.

1hoặc 2được phân tách mã thông báo ở đây. Khi shell thấy unquote $, nó sẽ xác định bắt đầu của bất kỳ ứng cử viên nào để mở rộng tham số, thay thế lệnh hoặc mở rộng số học. Nó nhìn thấy $-và mở rộng nó, phần còn lại không thay đổi.

Bạn có thể xem phần Nhận dạng mã thông báo để biết thêm chi tiết.


18

echo $-tùy chọn in của shell hiện tại (không có -tiền tố). 12là các mã thông báo không liên quan bổ sung.


11

Thêm vào câu trả lời của Miroslav:

echo $-tùy chọn in của shell hiện tại (không có -tiền tố). 1 và 2 là các mã thông báo không liên quan bổ sung.

Điều này có nghĩa là đây là các tùy chọn, cho mỗi máy tương ứng.

imsBEl
himBH

Tôi đã nghiên cứu ý nghĩa của mỗi lá cờ và biên soạn các ý nghĩa dưới đây, với sự diễn giải nhỏ.

-Tôi

Nếu tùy chọn -i có mặt, trình bao tương tác.

-m

Chế độ màn hình. Kiểm soát công việc được kích hoạt.

-B

Vỏ thực hiện mở rộng nẹp ( xem Mở rộng Brace ). Đây là trên chế độ mặc định.

-S

Nếu tùy chọn -s có mặt hoặc nếu không còn đối số sau khi xử lý tùy chọn, thì các lệnh được đọc từ đầu vào tiêu chuẩn. Tùy chọn này cho phép các tham số vị trí được đặt khi gọi trình bao tương tác.

-E

lỗi

-l

Làm cho bash hoạt động như thể nó đã được gọi như một vỏ đăng nhập

-h

băm

-H Mở rộng lịch sử

Tính năng này được bật theo mặc định cho các vỏ tương tác.


3

Để mở rộng các câu trả lời hiện có, hãy thử echo "${-1}"echo "${-2}"- bạn sẽ gặp lỗi "Thay thế xấu" vì thay vì sử dụng -1làm tên biến, dấu gạch nối được sử dụng để thay thế một giá trị nếu tên biến trước đó không được xác định. Ví dụ:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.