2016-08-26 10 views
0

これは私の初めてのstackoverflowです。私は現在の問題に直面しており、ここで詳細を共有しています。Busybox灰の部分文字列を比較

私は現在、POS自動化スクリプトを構築中です。 POS端末には、Shell Busybox ashがあります。基本的なコマンドを使用することができない理由は同じです。以下 はクエリです:

と仮定 [[$ I == $ N $ A]]は - この比較は$私は大きな文字列で、$ N $ Aが$ Iの部分文字列が含まれている完全一致、ためのものです。 私は[-z $ {I ## $ N $ A *]と["$ I" == "$ N $ A" *]構文を使用して部分文字列を比較しましたが、失敗し、

いずれかの提案がある場合は、ご案内ください。 私はいくつかのスクリプトをテストできるbusybox ash用のオンラインコンソールがあれば教えてください。

例を追加しました-27-08-16

仮定する - スクリプトが値$I = "Credit.saleApproved" を導出し、私は基本的に$N= "Credit" and $A= ".sale"
の値を渡していますが、$ N $ Aがあるエコーa サブストリングエコー$ I 私は、より良い理解のためにこの疑似論理を書いています

If [[ $I == $N$A ]] 
then 
echo "sale is complete" 
else 
echo "sale is declined" 
fi 

私は必要なすべてがある - >

1 . input : $I = Credit.saleApproved 
      $N$A = Credit.sale 
    Output :sale is complete 

2.input : $I = Credit.sApproved 
      $N$A = Credit.sale 
    Output :sale is Declined 
+0

あなたは正確な試合、試合開始試合、または試合に灰を含んでいますか? – Elijan9

+0

はい。私は正確な部分文字列の一致を探しています。 –

答えて

0

Bourne Again SHellは、Busyboxの灰など他のシェルでサポートされていないいくつかの比較をサポートしています。いくつかの一般的な落とし穴は、比較にワイルドカード(*)を使用して、ならびに、

具体[[ ... ]]との比較だけではbashでサポートされているhereに参加しています。

あなたが灰を使用して一致したい場合、あなたはこれらの試みることができる:文字列は、他のいくつかの文字列が含まれているかどうかを確認するには

[ "$I" == "$N$A" ] # Match exactly 
[ "$I" != "${I#$N$A}" ] # Starts with 
[ "$I" != "${I%$N$A}" ] # Ends with 

を、私はシェル表現でそれを行うための簡単な方法を考えることができ、灰${I/$N$A}のような文字列の置換をサポートしていません。たとえば、grepsedなど、複数のツールを選択できます。

あなたができるgrepを使用する:

[ -z $(echo "$I"|sed "/$N$A/d") ] # Contains 

しかし、これを達成するための多くの方法がある:あなたができるsedを使用して

if echo $I|grep "$N$A" - > /dev/null; then ... 

を。

+0

こんにちはElijan9、UrソリューションはOKですが、それは私の目的に役立ちません。例をあげてより明確に説明しましょう。 –

+0

私は私の質問に例を追加しました。見てください。 –

+0

grepとsedの両方の例では、サブ文字列のマッチングが行われます。たとえば、次のようになります。 'if echo $ I | grep" $ N $ A " - >/dev/null;エコー "販売が完了しました"。そうでなければエコー "販売は辞退" fi' – Elijan9