cut ステートメントからスペース区切りの単語の文字列を生成する

cut ステートメントからスペース区切りの単語の文字列を生成する

私は bash を初めて使います。次のコマンドを実行すると:

grep "type" /root/myFile | cut-d'=' -f2

次のような結果が出ます:

102
304
503
442

最初のコマンドの内容を変数に保存し、その変数の内容が次のように宣言するのと同等になるようにします。

myVariable="102 304 503 442"

これをどう進めればよいかわかりません。myVariable空の文字列で初期化し、コマンドの内容を 1 行ずつ走査して、間に空白を入れて myVariable に追加すればよいのでしょうか。それとも、bash でこれを行うより簡単な方法があるのでしょうか。

答え1

bashコマンド置換とパラメータ展開を使用して、それ自体でこれを行うことができます。

まず、コマンド置換を使用してコマンドの出力を変数に取得し$()、次にパラメータ展開を使用してすべての改行をスペースに置き換えます${variable//$'\n'/ }

$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2) 
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442

しかし、再利用性と簡潔さを考えると、配列を使用する方がよいでしょう。

myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )

通常の方法で配列要素を反復処理します。

答え2

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`

バックティック (`) で囲まれた部分が実行され、出力が に割り当てられますmyVariable

現在の出力が改行 ( \n) で区切られている場合は、次のように改行をスペースに置き換えることができますtr

myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`

注: バックティックの代わりに構文を使用することを好む人もいます$()が、どちらも便利なので、選択できる場合はバックティックを使用します。両方を使用することの本当の利点は、バックティック式が最初にサブシェルに送信され、次にその$()部分が実行されるため、実行を 2 つのレベルで処理する場合です。

関連情報