2016-08-26 141 views
0

这是我第一次在stackoverflow。我目前面临一个问题,并在这里分享细节。在Busybox ash中比较子串

我目前正在构建POS自动化脚本。 POS终端具有Shell Busybox灰。这就是为什么不能使用基本命令,因为那些行为不一样。 下面是查询:

假设 [$ I == $ N $ A]] - 这个比较是完全匹配,其中$我是更大的字符串,$ N $ A包含$我的子。 我已经使用了[-z $ {I ## $ N $ A *]和[“$ I”==“$ N $ A”*]语法来比较子字符串,但它失败了,而且行为不像它应该那样。

如果任何人有任何建议,请指导。 请让我知道,如果有任何在线控制台busybox灰,我可以测试一些脚本。

例新增-27-08-16

想 - 脚本导出值$I = "Credit.saleApproved" 和我传递的价值$N= "Credit" and $A= ".sale"
所以基本上呼应$ N $ 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的ash支持一些比较。一些常见的陷阱已被列入here

[[ ... ]]的具体比较仅受bash支持,以及在比较中使用通配符(*)。

如果您想使用灰搭配,你可以尝试这些:

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

要检查一个字符串是否包含其他字符串,我能想到的没有简单的方法来做到这一点与外壳表情,灰不支持字符串替换,如${I/$N$A}。有多种工具可供选择,例如grepsed

使用grep你可以这样做:

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

使用sed你可以这样做:

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

但也有许多方法来实现这一目标。

+0

嗨Elijan9,乌尔解决方案是好的,但它不符合我的目的。让我用一个例子更清楚地解释它。 –

+0

我已经为我的问题添加了示例。请看一看 。 –

+0

grep和sed示例都执行子字符串匹配。例如:'if echo $ I | grep“$ N $ A” - >/dev/null;然后回声“销售完成”;其他回声“销售被拒绝”; fi' – Elijan9