在bash中使if语句不区分大小写
我的代码将使用curl检查标题。有时标题及其值用大写字母显示,有时用小写字母显示 例如,在bash中使if语句不区分大小写,bash,curl,header,case-insensitive,lowercase,Bash,Curl,Header,Case Insensitive,Lowercase,我的代码将使用curl检查标题。有时标题及其值用大写字母显示,有时用小写字母显示 例如,X-request-Id可以像X-request-Id或X-request-Id一样找到 如何使if语句不区分大小写 if [[ $check_headers == "X-Requested-Id"* ]]; then 对于Bash 4或更高版本,可以使用a将字符串小写: if[${check_headers,,}==“x-request-id”*];然后 对于Bash 4或更新版本,您
X-request-Id
可以像X-request-Id
或X-request-Id
一样找到
如何使if语句不区分大小写
if [[ $check_headers == "X-Requested-Id"* ]]; then
对于Bash 4或更高版本,可以使用a将字符串小写:
if[${check_headers,,}==“x-request-id”*];然后
对于Bash 4或更新版本,您可以使用a将字符串小写:
if[${check_headers,,}==“x-request-id”*];然后
如果您没有访问Bash 4(或更新版本)的权限,可以将单独的变量定义为小写,然后根据需要引用“小写”变量,例如:
$ myvar='ABC_def'
$ typeset -l myvar_lower="${myvar}"
$ echo "${myvar_lower}"
abc_def
回到老年退休金问题:
typeset -l check_headers_lower="${check_headers}"
if [[ "${check_headers_lower}" == "X-Requested-Id"* ]]; then
注意事项:
- 没有什么可以阻止您将原始变量定义为小写,只要您确定在原始情况下对数据没有后续要求
- 更改变量的大小写不会影响变量的当前值a)
=>x=a;字体-l x;回显“${x}”
b)A
=>排版-lx;x=A;echo“${x}”
c)a
=>排版-lx=a;回声“${x}”
d)a
=>x=a;排版-lx=“${x}”;回显“${x}”
a
$ myvar='ABC_def'
$ typeset -l myvar_lower="${myvar}"
$ echo "${myvar_lower}"
abc_def
回到老年退休金问题:
typeset -l check_headers_lower="${check_headers}"
if [[ "${check_headers_lower}" == "X-Requested-Id"* ]]; then
注意事项:
- 没有什么可以阻止您将原始变量定义为小写,只要您确定在原始情况下对数据没有后续要求
- 更改变量的大小写不会影响变量的当前值a)
=>x=a;字体-l x;回显“${x}”
b)A
=>排版-lx;x=A;echo“${x}”
c)a
=>排版-lx=a;回声“${x}”
d)a
=>x=a;排版-lx=“${x}”;回显“${x}”
a
- 我更喜欢这里已经提出的所有其他建议,但是
如果在紧急情况下,您不记得那些语法,并且由于某种原因没有时间查找它们,请记住,如果只是检查它的操作数的返回值,那么您可以始终使用另一个程序。(哎呀,我讨厌运行不必要的进程,但正如我所说的,这是一个需要记住的黑客行为…)
将其包装在子shell中会限制
nocasematch
的范围
你说他的解决方案“行不通”。你能详细说明一下吗?我更喜欢这里已经提出的所有其他建议,但是 如果在紧急情况下,您不记得那些语法,并且由于某种原因没有时间查找它们,请记住,如果只是检查它的操作数的返回值,那么您可以始终使用另一个程序。(哎呀,我讨厌运行不必要的进程,但正如我所说的,这是一个需要记住的黑客行为…) 将其包装在子shell中会限制
nocasematch
的范围
你说他的解决方案“行不通”。您可以详细说明吗?使用
nocasematch
shell选项。就像Gordon Davisson在评论中提到的那样,测试后应该禁用它,并注意其他模式匹配,如使用=~
操作符
shopt -s nocasematch
if [[ $check_headers == "X-Requested-Id"* ]]; then
...
fi
shopt -u nocasematch
正如@Benjamin W.在评论中提到的,首先检查值
shopt
的状态是一个好的做法
使用eval
oldvalue=$(shopt -p nocasematch)
shopt -s nocasematch
if [[ $check_headers == "X-Requested-Id"* ]]; then
...
fi
eval "$oldvalue"
我会先检查
shopt
的状态,然后再启用它,然后再禁用它
没有eval
,类似于
#!/usr/bin/env bash
if ! shopt -q nocasematch; then
shopt -s nocasematch
on=1
fi
if [[ $check_headers == "X-Requested-Id"* ]]; then
....
fi
if ((on)); then
shopt -u nocasematch
on=0
fi
使用
nocasematch
shell选项。就像Gordon Davisson在评论中提到的那样,测试后应该禁用它,并注意其他模式匹配,如使用=~
操作符
shopt -s nocasematch
if [[ $check_headers == "X-Requested-Id"* ]]; then
...
fi
shopt -u nocasematch
正如@Benjamin W.在评论中提到的,首先检查值
shopt
的状态是一个好的做法
使用eval
oldvalue=$(shopt -p nocasematch)
shopt -s nocasematch
if [[ $check_headers == "X-Requested-Id"* ]]; then
...
fi
eval "$oldvalue"
我会先检查
shopt
的状态,然后再启用它,然后再禁用它
没有eval
,类似于
#!/usr/bin/env bash
if ! shopt -q nocasematch; then
shopt -s nocasematch
on=1
fi
if [[ $check_headers == "X-Requested-Id"* ]]; then
....
fi
if ((on)); then
shopt -u nocasematch
on=0
fi
尝试
shopt-s nocasematch
注意,设置nocasematch
也会影响其他类型的模式匹配,只要它们是由shell完成的(例如,文件名通配符和[[string=~regex]]
,但不是由grep
和sed
完成的匹配)。您可能希望也可能不希望这样,因此请准备根据需要打开和关闭nocasematch
。请尝试shopt-s nocasematch
注意,设置nocasematch
也会影响其他类型的模式匹配,只要它们是由shell完成的(例如文件名通配符和[[string=~regex]]
,但未通过grep
、sed
等进行匹配)。您可能需要,也可能不需要,因此请准备根据需要打开和关闭nocasematch
。@sof31请确保右侧也是小写。@sof31;如果你仍然有这个问题的答案,请考虑一个新的问题,并提供细节,让我们重现。issue@markp-扶桑把问题解决了。正如格伦·杰克曼(glen jackman)所说,我需要在if语句的右侧使用小写字母。谢谢。@sof31请确保右边也是小写。@sof31;如果你仍然有这个问题的答案,请考虑一个新的问题,并提供细节,让我们重现。issue@markp-扶桑把问题解决了。正如格伦·杰克曼(glen jackman)所说,我需要在if语句的右侧使用小写字母。谢谢。很好用,但是正在寻找