小编Lás*_*gyi的帖子

为什么 Bash `(())` 在 `[[]]` 中不起作用?

[[ " stop start status " =~ " $2 " && (($#<3)) ]] || { echo "Usage $0 file_name command"; exit 1;}
Run Code Online (Sandbox Code Playgroud)

我经常使用上述解决方案来检查我的 Bash 脚本的输入范围。

现在我意识到扩展的算术表达式(())看起来像是在双括号内被抑制了[[]]

为了说明问题:

a=start; n=1; [[ " stop start status " =~ " $a " && (($n<3)) ]] && echo ok || echo bad
ok
a=start; n=5; [[ " stop start status " =~ " $a " && (($n<3)) ]] && echo ok || echo bad
bad

# But:
a=start; n=100; [[ …
Run Code Online (Sandbox Code Playgroud)

linux bash

15
推荐指数
2
解决办法
239
查看次数

bash中的=〜运算符支持哪种正则表达式语法?

我发现我可以在4.2.10(1)BASH中使用=~ operator而不是exprcommand.它(在一个命令中)要快得多,expr而且这个事实在重复循环中很重要.

我能够使用正则表达式的大多数元字符但不是全部.

例如,我可以检查字符串是否匹配3个重复(一个小写字母,一个数字,一个点):

[[ "b3.f5.h3." =~ ^([a-z][0-9]\.){3}$  ]] && echo OK
OK
Run Code Online (Sandbox Code Playgroud)

我可以选择匹配的子串:

[[ "whatis12345thetwo765nmbers" =~ ^[a-z]+([0-9]+)[a-z]+([0-9]+) ]] && \
echo "The two number fields are: ${BASH_REMATCH[1]}  ${BASH_REMATCH[2]}"
The two number fields are: 12345  765
Run Code Online (Sandbox Code Playgroud)

但我想使用更多元字符,例如此TLDP页面上列出的元字符.

我特别想匹配字边界:\b,\B,\<,\>.

我试图在Advanced Bash-Scripting Guide(第18章和第37章)中找到答案,但没有成功.

我在哪里可以找到=~运营商的详细说明?

目前我只对BASH感兴趣而不是gawk,sed,perl或其他工具.

bash

2
推荐指数
1
解决办法
206
查看次数

标签 统计

bash ×2

linux ×1