2016-07-11 3 views
3

UNIXで出力を変数にリダイレクトするときに問題が発生しました。変数に値が代入されているとUnixでRegexが発生する

mobileTest.txt

abc.xyx.homepage:https://www.abc.xyz/h-offer/?fromms=1&LNX=KJHYU&oC=ABC 

スクリプト:

#!/bin/bash 
TEST_PAGE_KEY="abc.xyx.homepage" 

grep -w $TEST_PAGE_KEY mobileTest.txt | cut -d':' -f2-|sed 's/[&/\]/\\&/g' 

出力:変数にコマンドの出力をキャプチャするとき、これは、...これとは対照的に

https:\/\/www.abc.xyz\/h-offer\/?fromms=1\&LNX=KJHYU\&oC=ABC 

正しいです。

変数から0

出力:私はそれを変数に割り当てるときに出力が異なる理由

https:&&www.abc.xyz&h-offer&?fromms=1&LNX=KJHYU&oC=ABC 

が、私は理解していない(代わりにバックスラッシュを追加するのは、それが&で文字を置き換えます)。

答えて

3

あなたが理由のwhy the modern $(...) command-substitution syntax is preferable to legacy syntax `...`の1時にヒットしました:$(...)

、あなたはおよそ\文字を心配する必要はありません。あなたのコマンドでは、コマンド置換のコンテキストで特別な意味を持ちます。

したがって、$(...)ではなく`...`を使用すると、目的の結果得られます:

test_page_value=$(grep -w "$TEST_PAGE_KEY" mobileTest.txt | cut -d':' -f2-|sed 's/[&/\]/\\&/g') 

をまた、私はavoid conflicts with environment variables and special shell variablesするために、すべて大文字の変数名を避けてきたどのように注意してください、と私はしましたか潜在的なシェル展開からシェルを保護するために二重引用符(まだ名前が不十分)の$TEST_PAGE_KEYです。

+1

ありがとうmklement0。それは今働いた。 – malli

関連する問題