Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Question very similar to How to append multiple lines to a file with bash but I want to start the file with --, and also append to the file, if possible.

printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

The issue is starting the file with "--" gives me a:

-bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]

Is there a way to escape the --? Are there any alternatives? I'm not sure how to do multiple lines using echo, and cat isn't a good option, I'd like to have it in an automated script.

share|improve this question
up vote 15 down vote accepted

Most commands that accept --foo as an option also accept -- by itself as an "end of options, start of arguments" marker - so you could do:

printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

But the more specific answer to your exact example is that the first argument to printf is a format specifier, and you're making things more difficult than necessary by not using printf for its formatting abilities. This would be a better way to do what you want:

printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test

That tells printf to take each argument it gets and print it, followed by a newline. Easier than repeating the \n yourself, and it avoids the leading -- problem you were facing. And it removes the need to escape any % signs that your strings might contain.

As for how to do multiple lines with echo, you could use:

echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Or, much more portably:

{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test

Or using cat along with a here-doc:

cat >>.rspec-test <<EOF
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.