2017-03-19 1 views
0
は現在、私はこの2つのコマンドは ;によってseparetedいる

コマンドの結果にインラインサブストリング選択:のbash:

ID=$(wmctrl -d | grep "\* DG"); kdialog --msgbox "D = ${ID:(-1)}" 

は、補助変数IDの作成を回避するが、それでも、ここで(サブストリングのインデックスを使用して使用するために離れてあります後ろから数える負のインデックス)?

XXXの代わりに"D = ${XXX:(-1)}"を探しています。私の現在の試みはすべて「不良置換」エラーにつながります。

export ID=$(wmctrl -d | egrep "\* DG"); kdialog --msgbox "D = ${ID:(-1)}" 
+0

http://stackoverflow.com/questions/30146466/command-substitution-with-string-substitution – ewcz

+3

いいえ、変数をエクスポートする必要はありません。 – chepner

+0

正規表現は基本的な 'grep'でもうまく動作します。我々は最近、 'egrep'を' grep -E'に置き換えますが、 '-E'オプションはここではまったく必要ありません。 – tripleee

答えて

1

明白な回避策はegrepの代わりsedを使用することである:

kdialog --msgbox "D = $(wmctrl -d | sed -n 's/.*\* DG.*\(.\)$/\1/p')" 

元のコマンド(下記)は、いくつかの欠陥は、そのコメントの一部を参照しなければなりませんでしたここでのロジックは、デフォルトでは行を印刷しないことです(-n)。正規表現にマッチする行で、行全体を最後の文字に置き換え、マッチして後続の置換(/p)があったときに出力します。