
デフォルトでは、次のシナリオがあります。
grep 'test: \K(\d+)' $file
=> 15grep 'test1: \K(\d+)' $file
=> 20
たとえば、コンマを区切り文字として使用して、2つのコマンドの結果を変数に保存する方法はありますか?
Test="grep 'test: \K(\d+)' $file;grep 'test1: \K(\d+)' $file"
答え=eval $Test
期待される出力:15,20
か。
答え1
はい、次のようにすることができます。コマンドの置き換え:
Test="$(grep 'test: \K(\d+)' $file),$(grep 'test1: \K(\d+)' $file)"
変数=$(..)
呼び出されたコマンドの置き換えこれが意味するのは、シェルコマンドを実行し、その出力を変数に保存するか、echo
コマンドを使用して再表示することです。たとえば、日付と時刻を表示するには、次のようにします。
echo "Today is $(date)"
変数に保存します。
SERVERNAME="$(hostname)"
出力に接続できます。
echo "$(hostname),$(date)"
結果は次のとおりです。
yourhostname,Tue Jan 24 09:56:32 EET 2017
答え2
コマンドの出力を変数に入れるには、次のようにします。コマンドの置き換え、これがまさにそれが使用されることです。使用してもeval
役に立ちません(正しく使用してもあなたはそうではありません)。
Test="$(grep 'test: \K(\d+)' "$file"; grep 'test1: \K(\d+)' "$file")"
出力は改行で区切られた2つの数字です(各パターンが正確に1回一致すると仮定)。改行で区切られる理由は、他のツールと同様にgrepが行を出力し、行が常に改行で終わるためです。 1つ目はgrep
末尾に改行を印刷し、2番目は末尾に改行を印刷し、置換コマンドは最後の改行を削除します。カンマを区切り文字として使用するには、2つのコマンドの置き換えを2つのコマンドの間にカンマとして使用します。15
grep
20
Test="$(grep 'test: \K(\d+)' "$file"),$(grep 'test1: \K(\d+)' "$file")"