João
João

Reputation: 17

How do i use other command in the same line with echo

I want to use a command to be printed on the same line as the string. for example, i want to print something like:

hostname: cpu1

but when i use the command like this it doesnt work

echo 'hostname:' hostname

Upvotes: 0

Views: 473

Answers (3)

William Pursell
William Pursell

Reputation: 212248

Two answers are already given saying that you "need to" and "should" use command substitution by doing:

echo "hostname: $(hostname)"

but I will disagree with both. Although that works, it is aesthetically unappealing. That command instructs the shell to run hostname and read its output, and then pass that output as part of the argument to echo. But all that work is unnecessary. For this simple use case, it is "simpler" to do:

printf "hostname: "; hostname

(Using printf to suppress the newline, and avoiding echo -n because echo really should be treated as deprecated). This way, the output of hostname goes directly to the shell's stdout without any additional work being done by the shell. I put "simpler" in quotes because an argument could be made that humans find printf "hostname: %s\n" "$(hostname)" or echo "hostname: $(hostname)" to be simpler, and perhaps looking at much code that does things that way warps your mind and even makes it look simpler, but a few moments reflection should reveal that indeed it is not.

OTOH, there are valid reasons for collecting the output and writing the message with echo/printf. In particular, by doing it that way, the message will (most likely) be written with one system call and not be subject to interleaving with messages from other processes. If you printf first and then execute hostname, other processes' data may get written between the output of printf and the output of hostname. As always, YMMV.

Upvotes: 0

Ôrel
Ôrel

Reputation: 7622

You need to use $() to evaluate: echo 'hostname:' $(hostname)

Upvotes: 1

Lorenzo
Lorenzo

Reputation: 328

This is what you should do:

echo "hostname: `hostname`"

Words enclosed in backticks are read by the command line as commands even when they are inside a string, like in this case.

Have a great day! :)

Upvotes: 0

Related Questions