私は 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 つのレベルで処理する場合です。