Hầu hết các lệnh chấp nhận --foo
dưới dạng tùy chọn cũng tự chấp nhận --
là điểm đánh dấu "kết thúc tùy chọn, bắt đầu đối số" - vì vậy bạn có thể thực hiện:
printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Nhưng câu trả lời cụ thể hơn cho ví dụ chính xác của bạn là đối số đầu tiên cho printf là một công cụ xác định định dạng và bạn đang làm mọi thứ trở nên khó khăn hơn mức cần thiết bằng cách không sử dụng printf cho khả năng định dạng của nó. Đây sẽ là một cách tốt hơn để làm những gì bạn muốn:
printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test
Điều đó nói với printf lấy từng đối số mà nó nhận được và in nó, theo sau là một dòng mới. Dễ dàng hơn việc lặp lại \n
chính mình, và nó tránh được --
vấn đề hàng đầu mà bạn đang gặp phải. Và nó loại bỏ sự cần thiết phải thoát khỏi bất kỳ %
dấu hiệu nào mà chuỗi của bạn có thể chứa.
Về cách thực hiện nhiều dòng với echo
, bạn có thể sử dụng:
echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Hoặc, nhiều hơn nữa:
{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test
Hoặc sử dụng mèo cùng với tài liệu ở đây:
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF