Why is echo “bar” -n different from echo -n “bar”?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
Compare
echo -n "bar"
with
echo "bar" -n
The former does what I think it's supposed to do (prints "bar" without a newline), while the latter doesn't. Is this a bug or by design? Why is it different than many cli programs in that you can't move the options around? For example, tail -f /var/log/messages
is exactly the same as tail /var/log/messages -f
. I sometimes do the latter when I forget I wanted the former, because internally the options and arguments are rearranged, usually by getopt.
Update: yes I originally nerf-ed my question. I removed the nerf you'll have to view history to make some of the answers make sense.
command-line
add a comment |
Compare
echo -n "bar"
with
echo "bar" -n
The former does what I think it's supposed to do (prints "bar" without a newline), while the latter doesn't. Is this a bug or by design? Why is it different than many cli programs in that you can't move the options around? For example, tail -f /var/log/messages
is exactly the same as tail /var/log/messages -f
. I sometimes do the latter when I forget I wanted the former, because internally the options and arguments are rearranged, usually by getopt.
Update: yes I originally nerf-ed my question. I removed the nerf you'll have to view history to make some of the answers make sense.
command-line
3
From what I see, the difference is immediately obvious.echo -n "bar"
gives "bar", whileecho "bar" -n
gives "bar -n"
– phunehehe
Jan 20 '11 at 5:42
add a comment |
Compare
echo -n "bar"
with
echo "bar" -n
The former does what I think it's supposed to do (prints "bar" without a newline), while the latter doesn't. Is this a bug or by design? Why is it different than many cli programs in that you can't move the options around? For example, tail -f /var/log/messages
is exactly the same as tail /var/log/messages -f
. I sometimes do the latter when I forget I wanted the former, because internally the options and arguments are rearranged, usually by getopt.
Update: yes I originally nerf-ed my question. I removed the nerf you'll have to view history to make some of the answers make sense.
command-line
Compare
echo -n "bar"
with
echo "bar" -n
The former does what I think it's supposed to do (prints "bar" without a newline), while the latter doesn't. Is this a bug or by design? Why is it different than many cli programs in that you can't move the options around? For example, tail -f /var/log/messages
is exactly the same as tail /var/log/messages -f
. I sometimes do the latter when I forget I wanted the former, because internally the options and arguments are rearranged, usually by getopt.
Update: yes I originally nerf-ed my question. I removed the nerf you'll have to view history to make some of the answers make sense.
command-line
command-line
edited Jan 20 '11 at 18:19
Steven D
32.9k898108
32.9k898108
asked Jan 20 '11 at 3:16
xenoterracidexenoterracide
26.1k53159222
26.1k53159222
3
From what I see, the difference is immediately obvious.echo -n "bar"
gives "bar", whileecho "bar" -n
gives "bar -n"
– phunehehe
Jan 20 '11 at 5:42
add a comment |
3
From what I see, the difference is immediately obvious.echo -n "bar"
gives "bar", whileecho "bar" -n
gives "bar -n"
– phunehehe
Jan 20 '11 at 5:42
3
3
From what I see, the difference is immediately obvious.
echo -n "bar"
gives "bar", while echo "bar" -n
gives "bar -n"– phunehehe
Jan 20 '11 at 5:42
From what I see, the difference is immediately obvious.
echo -n "bar"
gives "bar", while echo "bar" -n
gives "bar -n"– phunehehe
Jan 20 '11 at 5:42
add a comment |
4 Answers
4
active
oldest
votes
As most others have observed, "-n" is interpreted literally if placed anywhere but immediately after the echo
command.
Historically, UNIX utilities were all like this -- they looked for options only immediately after the command name. It was likely either BSD or GNU who pioneered the more flexible style (though I could be wrong), as even now POSIX specifies the old way as correct (see Guideline 9, and also man 3 getopt
on a Linux system). Anyway, even though most Linux utilities these days use the new style, there are some holdouts like echo
.
Echo
is a mess, standards-wise, in that there were at least two fundamentally conflicting versions in play by the time POSIX came into being. On the one hand, you have SYSV-style, which interprets backslash-escaped characters but otherwise treats its arguments literally, accepting no options. On the other, you have BSD-style, which treats an initial -n
as a special case and outputs absolutely everything else literally. And since echo
is so convenient, you have thousands of shell scripts that depend on one behavior or the other:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON'T USE -n -- it's not finished! --
Because of the "treat everything literally" semantic, it's impossible to even add a new option to echo
without breaking things. If GNU used the flexible options scheme on it, hell would break loose.
Incidentally, for best compatibility between Bourne shell implementations, use printf
rather than echo
.
UPDATED to explain why echo
in particular does not use flexible options.
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
1
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variablePOSIXLY_CORRECT
.
– Gilles
Jan 20 '11 at 21:29
1
For the specific case ofecho
, there are also implementations that recognize-e
or-E
as options. For portability, don't start with a-
or use something likeprintf %s -e
.
– Gilles
Jan 20 '11 at 21:30
|
show 1 more comment
The other answers get to the point that you can look at the man page to see that -n is becoming part of the string to echo. However I just want to point out that it's easy to investigate this without the md5sum and makes what's going on a little less cryptic.
[11:07:44][dasonk@Chloe:~]: echo -n "bar"
bar[11:07:48][dasonk@Chloe:~]: echo "bar" -n
bar -n
3
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
add a comment |
Wow, everyone's explanations are lengthy.
It's this simple:
-n
is an option if it appears before the string, otherwise it's just another string to be echoed.
Remove the | md5sum
and you'll see the output is different.
add a comment |
From simple inspection, this is not a bug by design...
echo "bar" -n | md5sum
a3f8efa5dd10e90aee0963052e3650a1
Try this command for yourself:
echo "bar -n" | md5sum
You will notice that the resulting md5 is
a3f8efa5dd10e90aee0963052e3650a1
You just mixed-up the use of -n in echo.
In your first sample code
echo -n "bar" | md5sum
-n is used to say DO NOT to put a newline after this echo.
Your second sample
echo "bar" -n | md5sum
is treating -n as a literal text.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f6162%2fwhy-is-echo-bar-n-different-from-echo-n-bar%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
As most others have observed, "-n" is interpreted literally if placed anywhere but immediately after the echo
command.
Historically, UNIX utilities were all like this -- they looked for options only immediately after the command name. It was likely either BSD or GNU who pioneered the more flexible style (though I could be wrong), as even now POSIX specifies the old way as correct (see Guideline 9, and also man 3 getopt
on a Linux system). Anyway, even though most Linux utilities these days use the new style, there are some holdouts like echo
.
Echo
is a mess, standards-wise, in that there were at least two fundamentally conflicting versions in play by the time POSIX came into being. On the one hand, you have SYSV-style, which interprets backslash-escaped characters but otherwise treats its arguments literally, accepting no options. On the other, you have BSD-style, which treats an initial -n
as a special case and outputs absolutely everything else literally. And since echo
is so convenient, you have thousands of shell scripts that depend on one behavior or the other:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON'T USE -n -- it's not finished! --
Because of the "treat everything literally" semantic, it's impossible to even add a new option to echo
without breaking things. If GNU used the flexible options scheme on it, hell would break loose.
Incidentally, for best compatibility between Bourne shell implementations, use printf
rather than echo
.
UPDATED to explain why echo
in particular does not use flexible options.
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
1
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variablePOSIXLY_CORRECT
.
– Gilles
Jan 20 '11 at 21:29
1
For the specific case ofecho
, there are also implementations that recognize-e
or-E
as options. For portability, don't start with a-
or use something likeprintf %s -e
.
– Gilles
Jan 20 '11 at 21:30
|
show 1 more comment
As most others have observed, "-n" is interpreted literally if placed anywhere but immediately after the echo
command.
Historically, UNIX utilities were all like this -- they looked for options only immediately after the command name. It was likely either BSD or GNU who pioneered the more flexible style (though I could be wrong), as even now POSIX specifies the old way as correct (see Guideline 9, and also man 3 getopt
on a Linux system). Anyway, even though most Linux utilities these days use the new style, there are some holdouts like echo
.
Echo
is a mess, standards-wise, in that there were at least two fundamentally conflicting versions in play by the time POSIX came into being. On the one hand, you have SYSV-style, which interprets backslash-escaped characters but otherwise treats its arguments literally, accepting no options. On the other, you have BSD-style, which treats an initial -n
as a special case and outputs absolutely everything else literally. And since echo
is so convenient, you have thousands of shell scripts that depend on one behavior or the other:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON'T USE -n -- it's not finished! --
Because of the "treat everything literally" semantic, it's impossible to even add a new option to echo
without breaking things. If GNU used the flexible options scheme on it, hell would break loose.
Incidentally, for best compatibility between Bourne shell implementations, use printf
rather than echo
.
UPDATED to explain why echo
in particular does not use flexible options.
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
1
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variablePOSIXLY_CORRECT
.
– Gilles
Jan 20 '11 at 21:29
1
For the specific case ofecho
, there are also implementations that recognize-e
or-E
as options. For portability, don't start with a-
or use something likeprintf %s -e
.
– Gilles
Jan 20 '11 at 21:30
|
show 1 more comment
As most others have observed, "-n" is interpreted literally if placed anywhere but immediately after the echo
command.
Historically, UNIX utilities were all like this -- they looked for options only immediately after the command name. It was likely either BSD or GNU who pioneered the more flexible style (though I could be wrong), as even now POSIX specifies the old way as correct (see Guideline 9, and also man 3 getopt
on a Linux system). Anyway, even though most Linux utilities these days use the new style, there are some holdouts like echo
.
Echo
is a mess, standards-wise, in that there were at least two fundamentally conflicting versions in play by the time POSIX came into being. On the one hand, you have SYSV-style, which interprets backslash-escaped characters but otherwise treats its arguments literally, accepting no options. On the other, you have BSD-style, which treats an initial -n
as a special case and outputs absolutely everything else literally. And since echo
is so convenient, you have thousands of shell scripts that depend on one behavior or the other:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON'T USE -n -- it's not finished! --
Because of the "treat everything literally" semantic, it's impossible to even add a new option to echo
without breaking things. If GNU used the flexible options scheme on it, hell would break loose.
Incidentally, for best compatibility between Bourne shell implementations, use printf
rather than echo
.
UPDATED to explain why echo
in particular does not use flexible options.
As most others have observed, "-n" is interpreted literally if placed anywhere but immediately after the echo
command.
Historically, UNIX utilities were all like this -- they looked for options only immediately after the command name. It was likely either BSD or GNU who pioneered the more flexible style (though I could be wrong), as even now POSIX specifies the old way as correct (see Guideline 9, and also man 3 getopt
on a Linux system). Anyway, even though most Linux utilities these days use the new style, there are some holdouts like echo
.
Echo
is a mess, standards-wise, in that there were at least two fundamentally conflicting versions in play by the time POSIX came into being. On the one hand, you have SYSV-style, which interprets backslash-escaped characters but otherwise treats its arguments literally, accepting no options. On the other, you have BSD-style, which treats an initial -n
as a special case and outputs absolutely everything else literally. And since echo
is so convenient, you have thousands of shell scripts that depend on one behavior or the other:
echo Usage: my_awesome_script '[-a]' '[-b]' '[-c]' '[-n]'
echo -a does a thing.
echo -b does something else.
echo -c makes sure -a works right.
echo -- DON'T USE -n -- it's not finished! --
Because of the "treat everything literally" semantic, it's impossible to even add a new option to echo
without breaking things. If GNU used the flexible options scheme on it, hell would break loose.
Incidentally, for best compatibility between Bourne shell implementations, use printf
rather than echo
.
UPDATED to explain why echo
in particular does not use flexible options.
edited Jan 20 '11 at 16:15
answered Jan 20 '11 at 7:56
JanderJander
11.9k43358
11.9k43358
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
1
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variablePOSIXLY_CORRECT
.
– Gilles
Jan 20 '11 at 21:29
1
For the specific case ofecho
, there are also implementations that recognize-e
or-E
as options. For portability, don't start with a-
or use something likeprintf %s -e
.
– Gilles
Jan 20 '11 at 21:30
|
show 1 more comment
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
1
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variablePOSIXLY_CORRECT
.
– Gilles
Jan 20 '11 at 21:29
1
For the specific case ofecho
, there are also implementations that recognize-e
or-E
as options. For portability, don't start with a-
or use something likeprintf %s -e
.
– Gilles
Jan 20 '11 at 21:30
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
upvote since you're the only one to mention that's the expected getopt behavior.
– Geoffrey Bachelet
Jan 20 '11 at 8:41
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@jander why is echo a "holdout"? I think it's a gnu coreutil?
– xenoterracide
Jan 20 '11 at 10:25
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
@xeno: I've updated my answer. Basically, GNU didn't want to break things.
– Jander
Jan 20 '11 at 16:16
1
1
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variable
POSIXLY_CORRECT
.– Gilles
Jan 20 '11 at 21:29
Accepting options after the first non-option is specific to GNU utilities and program using GNU libc's getopt facilities. The user can always get backward-compatible behavior by setting the environment variable
POSIXLY_CORRECT
.– Gilles
Jan 20 '11 at 21:29
1
1
For the specific case of
echo
, there are also implementations that recognize -e
or -E
as options. For portability, don't start with a -
or use something like printf %s -e
.– Gilles
Jan 20 '11 at 21:30
For the specific case of
echo
, there are also implementations that recognize -e
or -E
as options. For portability, don't start with a -
or use something like printf %s -e
.– Gilles
Jan 20 '11 at 21:30
|
show 1 more comment
The other answers get to the point that you can look at the man page to see that -n is becoming part of the string to echo. However I just want to point out that it's easy to investigate this without the md5sum and makes what's going on a little less cryptic.
[11:07:44][dasonk@Chloe:~]: echo -n "bar"
bar[11:07:48][dasonk@Chloe:~]: echo "bar" -n
bar -n
3
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
add a comment |
The other answers get to the point that you can look at the man page to see that -n is becoming part of the string to echo. However I just want to point out that it's easy to investigate this without the md5sum and makes what's going on a little less cryptic.
[11:07:44][dasonk@Chloe:~]: echo -n "bar"
bar[11:07:48][dasonk@Chloe:~]: echo "bar" -n
bar -n
3
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
add a comment |
The other answers get to the point that you can look at the man page to see that -n is becoming part of the string to echo. However I just want to point out that it's easy to investigate this without the md5sum and makes what's going on a little less cryptic.
[11:07:44][dasonk@Chloe:~]: echo -n "bar"
bar[11:07:48][dasonk@Chloe:~]: echo "bar" -n
bar -n
The other answers get to the point that you can look at the man page to see that -n is becoming part of the string to echo. However I just want to point out that it's easy to investigate this without the md5sum and makes what's going on a little less cryptic.
[11:07:44][dasonk@Chloe:~]: echo -n "bar"
bar[11:07:48][dasonk@Chloe:~]: echo "bar" -n
bar -n
answered Jan 20 '11 at 5:09
DasonDason
21349
21349
3
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
add a comment |
3
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
3
3
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
+1 exactly. If a pipeline isn't doing what you expect, test each part separately.
– Mikel
Jan 20 '11 at 5:20
add a comment |
Wow, everyone's explanations are lengthy.
It's this simple:
-n
is an option if it appears before the string, otherwise it's just another string to be echoed.
Remove the | md5sum
and you'll see the output is different.
add a comment |
Wow, everyone's explanations are lengthy.
It's this simple:
-n
is an option if it appears before the string, otherwise it's just another string to be echoed.
Remove the | md5sum
and you'll see the output is different.
add a comment |
Wow, everyone's explanations are lengthy.
It's this simple:
-n
is an option if it appears before the string, otherwise it's just another string to be echoed.
Remove the | md5sum
and you'll see the output is different.
Wow, everyone's explanations are lengthy.
It's this simple:
-n
is an option if it appears before the string, otherwise it's just another string to be echoed.
Remove the | md5sum
and you'll see the output is different.
answered Jan 20 '11 at 5:14
MikelMikel
40.1k10103128
40.1k10103128
add a comment |
add a comment |
From simple inspection, this is not a bug by design...
echo "bar" -n | md5sum
a3f8efa5dd10e90aee0963052e3650a1
Try this command for yourself:
echo "bar -n" | md5sum
You will notice that the resulting md5 is
a3f8efa5dd10e90aee0963052e3650a1
You just mixed-up the use of -n in echo.
In your first sample code
echo -n "bar" | md5sum
-n is used to say DO NOT to put a newline after this echo.
Your second sample
echo "bar" -n | md5sum
is treating -n as a literal text.
add a comment |
From simple inspection, this is not a bug by design...
echo "bar" -n | md5sum
a3f8efa5dd10e90aee0963052e3650a1
Try this command for yourself:
echo "bar -n" | md5sum
You will notice that the resulting md5 is
a3f8efa5dd10e90aee0963052e3650a1
You just mixed-up the use of -n in echo.
In your first sample code
echo -n "bar" | md5sum
-n is used to say DO NOT to put a newline after this echo.
Your second sample
echo "bar" -n | md5sum
is treating -n as a literal text.
add a comment |
From simple inspection, this is not a bug by design...
echo "bar" -n | md5sum
a3f8efa5dd10e90aee0963052e3650a1
Try this command for yourself:
echo "bar -n" | md5sum
You will notice that the resulting md5 is
a3f8efa5dd10e90aee0963052e3650a1
You just mixed-up the use of -n in echo.
In your first sample code
echo -n "bar" | md5sum
-n is used to say DO NOT to put a newline after this echo.
Your second sample
echo "bar" -n | md5sum
is treating -n as a literal text.
From simple inspection, this is not a bug by design...
echo "bar" -n | md5sum
a3f8efa5dd10e90aee0963052e3650a1
Try this command for yourself:
echo "bar -n" | md5sum
You will notice that the resulting md5 is
a3f8efa5dd10e90aee0963052e3650a1
You just mixed-up the use of -n in echo.
In your first sample code
echo -n "bar" | md5sum
-n is used to say DO NOT to put a newline after this echo.
Your second sample
echo "bar" -n | md5sum
is treating -n as a literal text.
edited 5 hours ago
Rui F Ribeiro
41.9k1483142
41.9k1483142
answered Jan 20 '11 at 3:36
icasimpanicasimpan
304516
304516
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f6162%2fwhy-is-echo-bar-n-different-from-echo-n-bar%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3
From what I see, the difference is immediately obvious.
echo -n "bar"
gives "bar", whileecho "bar" -n
gives "bar -n"– phunehehe
Jan 20 '11 at 5:42