比较 Busybox ash 中的子字符串

Deb*_*jee 5 shell busybox

这是我第一次使用 stackoverflow。我目前面临一个问题,在这里分享详细信息。

我目前正在构建 POS 自动化脚本。POS 终端有 Shell Busybox ash 。这就是为什么我不能使用基本命令的原因,因为它们的行为不一样。以下是查询:

假设 [[ $I == $N$A ]] - 此比较用于精确匹配,其中 $I 是更大的字符串,$N$A 包含 $I 的子字符串。我已经使用 [ -z ${I##$N$A* ] 和 [ “$I” == “$N$A”* ] 语法来比较子字符串,但它失败了,并且表现不佳。

如果有人对此有任何建议,请指导。请让我知道是否有任何busybox ash的在线控制台,我可以在其中测试一些脚本。

添加示例 -27-08-16

假设 - 派生该值的脚本$I = "Credit.saleApproved" ,我正在传递值$N= "Credit" and $A= ".sale"
所以基本上 echo $N$A是echo $I子字符串 我正在编写这个伪逻辑以便更好地理解

If  [[ $I == $N$A ]]  
then  
echo "sale is complete"  
else  
echo "sale is declined"  
fi   
Run Code Online (Sandbox Code Playgroud)

我只需要-->

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  
Run Code Online (Sandbox Code Playgroud)

Eli*_*an9 5

伯恩Again Shell的支持不被其他炮弹,如Busybox的ash支持一些比较。这里列出了一些常见的陷阱

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

如果您想使用 ash 进行匹配,可以尝试以下方法:

[ "$I" == "$N$A" ] # Match exactly
[ "$I" != "${I#$N$A}" ] # Starts with
[ "$I" != "${I%$N$A}" ] # Ends with
Run Code Online (Sandbox Code Playgroud)

要检查字符串是否包含其他字符串,我想不出使用 shell 表达式的简单方法,ash 不支持字符串替换,如${I/$N$A}. 有多种工具可供选择,例如grepsed

使用grep你可以:

if echo $I|grep "$N$A" - > /dev/null; then ...
Run Code Online (Sandbox Code Playgroud)

使用sed你可以:

[ -z $(echo "$I"|sed "/$N$A/d") ] # Contains
Run Code Online (Sandbox Code Playgroud)

但是有很多方法可以实现这一点。