Mở rộng arg{1,2,3}thành arg1 arg2 arg3được gọi là Mở rộng Brace, chia thành ba từ được gọi là Chia tách từ và chèn Thay thế lệnh đầu ra của lệnh. man bashnói:
Thứ tự mở rộng là: mở rộng cú đúp ; mở rộng dấu ngã, mở rộng tham số và biến, mở rộng số học và thay thế lệnh (được thực hiện theo kiểu từ trái sang phải); tách từ ; và mở rộng tên đường dẫn.
Trong một dòng lệnh như
printf %s\\n {1..3}
Mở rộng cú đúp xảy ra đầu tiên và làm cho nó
printf %s\\n 1 2 3
nơi 1, 2và 3là những từ riêng biệt nhờ vào Lời Chia. Bạn không thể làm gì để thay đổi thứ tự này - như bạn đã trải nghiệm, trích dẫn nó không chỉ ngăn chặn Chia tách Word mà còn mở rộng Brace. Tuy nhiên, bạn có thể sử dụng Thay thế Lệnh để có được Mở rộng Brace ngay cả trong dấu ngoặc kép:
Nếu thay thế [lệnh] xuất hiện trong dấu ngoặc kép, thì việc tách từ
và mở rộng tên đường dẫn không được thực hiện trên kết quả.
Trong
printf %s\\n "$(echo {1..3})"
bên trong của trích dẫn được mở rộng đầu tiên
printf %s\\n "$(echo 1 2 3)"
printf %s\\n "1 2 3"
và như kết quả được trích dẫn, nó không chịu sự chia tách của Word:
$ printf %s\\n {1..3} "{1..3}" "$(echo {1..3})" # prints one argument per line
1
2
3
{1..3}
1 2 3
Đây thực sự không chỉ là cách đơn giản nhất để làm điều này, mà còn là một bashgiải pháp thuần túy , như echolà một bashnội dung.