1行でコマンドを実行した後、パラメータを置き換えます。

1行でコマンドを実行した後、パラメータを置き換えます。
bash# hostname
host1.example.com

私はホスト1だけが欲しい。だから:

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

ライナーに変更できますか? -or- $SHORT_HOST を読み取り専用にしても短いホスト名を取得する最良の方法は何ですか?

答え1

bashツールに限定されない場合は、お試しください。

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

または

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

答え2

あなたの環境がそれをサポートしている場合は、単に次のことができます。

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

答え3

これはawkコマンドを使用する別の方法です。

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

SHORT_HOST変数に保存する必要がある場合は、次のコマンドを使用してください。

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

答え4

zsh以外のシェルでは、値に対して複数の変換を実行するたびに中間割り当てを実行する必要があります。

もちろん、時には次の解決策がいくつかあります。後処理なしで目的の結果を生成するコマンドの実行またはパイプラインによる後処理外部ツールを介して(配管された解決策は遅くなり、改行文字が壊れる危険性が高くなります。)

変数を読み取り専用にするには、一時変数に割り当てる方がよりきれいになる可能性があります。

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

Zsh(kshまたはbashを除く)は、入れ子になったパラメータ置換をサポートします。そこに書くことができます

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

関連情報