bash# hostname

I only want host1. So:


Can I turn this into a one liner? - or - what is the best way to make $SHORT_HOST readonly, but still get the short hostname?

4 Answers 4


If you're not limited to just bash's tools, maybe try

SHORT_HOST=$(hostname | sed -e 's/\..*//')


SHORT_HOST=$(hostname | cut -d. -f1)

If your environment supports this, you could simply:

typeset -r SHORT_HOST="$(/bin/hostname -s)"

This is just another way using awk command:

/bin/hostname | awk -F'.' '{print $1}'

and if you need to store it in a SHORT_HOST variable use the following:

SHORT_HOST=$(/bin/hostname | awk -F'.' '{print $1}')

In shells other than zsh, you need to perform an intermediate assignment whenever you want to perform multiple transformations on a value.

Of course, there are sometimes workarounds, such as running a command that produces the desired result with no postprocessing or doing the postprocessing via a pipe through an external tool (the pipe solution will be slower and runs into more risk of mangling newlines).

If you want to make the variable read-only, you might find it cleaner to assign to a temporary variable.

typeset -r SHORT_HOST="${tmp%%.*}"

Zsh (but not ksh or bash) supports nested parameter substitutions. There, you can write

typeset -r SHORT_HOST=${$(/bin/hostname)%%.*}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .