Nó chạy bởi vì theo mặc định, tệp thực thi được coi là tập lệnh / bin / sh. Tức là nếu bạn không chỉ định bất kỳ shell cụ thể nào - đó là #! / Bin / sh.
// chỉ bị bỏ qua trong các đường dẫn - bạn có thể xem là ở dạng đơn '/'.
Vì vậy, bạn có thể xem xét rằng bạn có kịch bản shell với dòng đầu tiên:
/usr/bin/env go run $0 $@ ; exit
Dòng này làm gì? Nó chạy 'env' với các thông số viên 'chạy $ 0 $ @'. có 'go' là lệnh và 'chạy $ 0 $ @' là các đối số và thoát khỏi tập lệnh sau đó. $ 0 là tên tập lệnh này. $ @ là các đối số kịch bản gốc. Vì vậy, dòng này chạy đi mà chạy tập lệnh này với các đối số của nó
Có nhiều chi tiết khá thú vị, như được nêu trong các bình luận, rằng hai dấu gạch chéo được xác định theo cách triển khai và tập lệnh này sẽ trở thành POSIX chính xác nếu nó chỉ định ba dấu gạch chéo trở lên. Tham khảo http://pub.opengroup.org/onlinepub/9699919799/basingefs/V1_chap04.html để biết chi tiết về cách xử lý dấu gạch chéo trong đường dẫn.
Cũng lưu ý rằng có một lỗi khác trong tập lệnh $ @ thay vào đó là sử dụng "$ @", vì nếu không, nếu có bất kỳ tham số nào chứa khoảng trắng, nó sẽ được chia thành nhiều tham số. Ví dụ: bạn không thể chuyển tên tệp có dấu cách nếu bạn không sử dụng "$ @"
Kịch bản cụ thể này rõ ràng dựa vào ý tưởng rằng '//' bằng với '/'
//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"
...