gpt4 book ai didi

shell - 比较 Busybox ash 中的子字符串

转载 作者:行者123 更新时间:2023-12-03 16:26:21 24 4
gpt4 key购买 nike

这是我第一次使用 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

我只需要-->
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

最佳答案

Bourne Again SHell支持一些其他shell不支持的比较,比如Busybox ash。一些常见的陷阱被征募here

具体对比[[ ... ]]仅 bash 支持,并在比较中使用通配符 ( * )。

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

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

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

使用 grep你可以这样做:
if echo $I|grep "$N$A" - > /dev/null; then ...

使用 sed你可以这样做:
[ -z $(echo "$I"|sed "/$N$A/d") ] # Contains

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

关于shell - 比较 Busybox ash 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39162967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com