Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中使if语句不区分大小写_Bash_Curl_Header_Case Insensitive_Lowercase - Fatal编程技术网

在bash中使if语句不区分大小写

在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或更新版本,您

我的代码将使用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或更新版本,您可以使用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}”
    =>
    A
    b)
    排版-lx;x=A;echo“${x}”
    =>
    a
    c)
    排版-lx=a;回声“${x}”
    =>
    a
    d)
    x=a;排版-lx=“${x}”;回显“${x}”
    =>
    a

如果您没有访问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}”
    =>
    A
    b)
    排版-lx;x=A;echo“${x}”
    =>
    a
    c)
    排版-lx=a;回声“${x}”
    =>
    a
    d)
    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语句的右侧使用小写字母。谢谢。很好用,但是正在寻找