Các câu trả lời bạn tìm thấy trên Stack Exchange là đúng và hướng dẫn này sai. Bạn có thể tự thử nghiệm hoặc tìm kiếm nó trong tiêu chuẩn . Một unset IFS
tương đương với việc đặt nó thành giá trị mặc định của không gian-tab-newline, trong khi một cách trống IFS
có hiệu quả tắt tách trường.
Bạn có thể tham khảo trang của Sven Mascheck trên IFS về các triển khai lịch sử. Một vài shell lịch sử không thích unset IFS
, và một phiên bản ksh rất cũ đã coi nó như một IFS
vỏ rỗng nhưng tất cả các shell hiện đại và hầu hết các shell cũ đều coi một unset IFS
như giá trị mặc định.
Bạn không nên bắt đầu tập lệnh của mình IFS=
trừ khi bạn muốn tắt phân tách trường (đó có thể là một quyết định hợp lý - nhưng lưu ý rằng bạn vẫn cần đặt dấu ngoặc kép xung quanh các thay thế để tránh bị chặn, trừ khi bạn cũng tắt nó đi set -f
). Để đặt lại giá trị mặc định, sử dụng unset IFS
. Người ta tranh cãi liệu điều này có hữu ích khi bắt đầu một kịch bản hay không; có rất nhiều điều tồi tệ khác như sự tinh ranh PATH
mà người gọi có thể làm để làm cho kịch bản của bạn bị sai.
Hướng dẫn này cũng khuyên nên thiết lập lại PATH
. Đây thường là lời khuyên tồi. Trong hầu hết các trường hợp, bạn không thể dự đoán đường dẫn tìm kiếm chính xác là gì, nhưng người dùng biết. Làm thế nào để bạn biết liệu có /usr/local/bin
hoặc /home/bob/bin
chứa các phiên bản tiện ích cố định lỗi trên một unix cổ mà các /usr/bin
lỗi trong đó là lỗi không? Bạn có thực sự muốn nhúng tất cả logic để tìm hiểu xem có nên đi /usr/xpg6/bin
trước /bin
không? Ở vị trí nào bạn muốn /usr/gnu/bin
? Không đặt lại PATH trừ khi tập lệnh của bạn nhắm vào một hệ thống cụ thể.
Tôi chưa đọc hướng dẫn này, nhưng tôi đã kiểm tra một điều: nó không cho bạn biết ngay từ đầu để luôn đặt dấu ngoặc kép xung quanh các thay thế thay thế và thay thế lệnh. Vì vậy, tôi không nghĩ rằng hướng dẫn này là một hướng dẫn tốt.
unset IFS
không đặt lại IFS về giá trị mặc định của nó trong bash mặc dù nó đặt lại phân tách trường.