誰でもこの問題で私を助けることができますか?
Awkの出力を変数に保存しようとしています。
variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"
編集:$ 12は、そのプロセスで実行されているパラメーターに対応します。
ありがとう!
_#!/bin/bash
variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable
_
等号の後にスペースがないことに注意してください。
$()
を使用することもできます。これは、ネストを許可し、読み取り可能です。
$()構文は読みやすいと思います...
variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')
しかし、本当の問題はおそらく$12
を「」で囲んではいけません
質問が変更されてから編集されたため、有効なデータが返されますが、ps -ef
は、変数に期待されるものです。
前述のように、bash変数を設定しても、「=」記号のLHSの変数名とRHSの変数値の間に空白を入れることはできません。
awkはすべてを行うことができ、「awk」方向の余分な「grep」を回避できます。 awkのprintfの使用は、Perlのようなマッチャープログラムに接続を与える不必要な「\ n」を文字列に追加しないことです。 bashの場合の変数/パラメーター展開にはその問題がないため、次のいずれかが機能します。
variable=$(ps -ef | awk '/port 10 \-/ {print $12}')
variable=`ps -ef | awk '/port 10 \-/ {print $12}'`
Awkレコードマッチングパターンの「-」は、検索結果からawk自体を削除する必要がなくなります。
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')
[p]
は、ps
から表示から検索を削除する巧妙なトリックです。
@Jeremy ps -ef | grep "port 10"
の出力とその行から必要なものを投稿すると、正しい構文を取得するのがより簡単になります。