echo \"$(hostname -I)\" が最後の数字の後にスペースを表示するのはなぜですか?この状況を避ける方法は?

echo \

echo \"$(hostname -I)\""111.111.111 " 余分なスペースを避け、次に出力を変更するにはどうすればよいですか?"111.111.111"

ベストアンサー1

コマンドが空白を印刷すると、出力に含まれます。さて、実際にはコマンド置換が引用されていないため、結果はトークン化され、2つの文字列と合計が2つの異なる引数"111.111.111に渡され、単一のスペースに連結されて"印刷されます。ここでは出力は変わりませんが、他の多くの場合には重要です。命令の置換後に何もない場合、単語分割の過程で空白は消えます。echoechoecho

複数のIPアドレスを印刷できるため、末尾のスペースをhostname -I印刷する可能性が高く、最後のスペースをスキップするよりも、各IPアドレスの後にスペースを印刷する方が簡単です。

スペースを削除するには、サフィックス除去拡張を使用できます。

ip="$(hostname -I)"
ip="${ip% }"
printf '"%s"\n' "$ip"

または噴射を活用してください。

printf '"%s"\n' $(hostname -I)

後者は、スペースで区切られた各IPアドレスを個別に引用し、1行に1つずつ印刷します。

おすすめ記事