Hãy xem xét những điều sau đây:
$ ksh -c '1(){ echo hi;};1'
ksh: 1: invalid function name
$ dash -c '1(){ echo hi;};1'
dash: 1: Syntax error: Bad function name
$ bash -c '1(){ echo hi;};1'
bash: `1': not a valid identifier
bash: 1: command not found
$ mksh -c '1(){ echo hi;};1'
hi
Về cơ bản, tôi đã cố gắng để khai báo các chức năng 1
và 0
đó sẽ là shorthands cho true
và false
, nhưng như bạn có thể thấy tôi chạy vào vấn đề với việc sử dụng tên số trong chức năng. Hành vi tương tự xảy ra với bí danh và tên hai chữ số.
Câu hỏi là "tại sao"? Được ủy quyền bởi POSIX? hoặc chỉ là một sự châm biếm của vỏ như bourne?
Xem thêm câu hỏi liên quan đến câu hỏi này.
0
là true
trong kịch bản shell và 1
là false
(thực sự, bất kỳ khác không được coi là sai), trong trường hợp bất cứ ai đọc sách này không hề biết. Điều này là ngược từ hầu hết các ngôn ngữ lập trình khác.
true
trong vỏ. Tuy nhiên, trong $((...))
trạng thái trả về mở rộng số học được lật - 1 là true
và 0 là false
để thống nhất với cú pháp ngôn ngữ C. Hãy thử ví dụ bash -c 'echo $((1==1));echo $((1==2))'
Những gì tôi đã cố gắng thực hiện ngoài câu hỏi này thực sự là "đảo ngược" hành vi. Xem ví dụ cuối cùng về câu trả lời của tôi ở đây để xem chính xác những gì tôi đã cố gắng làm. Ý tưởng ngớ ngẩn, nhưng dù sao cũng hoạt động