Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Bash字符串比较不符合true。

Bash字符串比较不符合true。
EN

Stack Overflow用户
提问于 2017-11-10 13:26:17
回答 2查看 392关注 0票数 0

我有一个脚本,在那里我想找出HTTP请求的状态代码。但是,if语句永远不会计算为true,我也不明白为什么。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh

set -e

CURL='/usr/bin/curl'
CURL_ARGS='-o - -I -s'
GREP='/usr/bin/grep'

url="https://stackoverflow.com"

res=$($CURL $CURL_ARGS $url | $GREP "HTTP/1.1")

echo $res # This outputs 'HTTP/1.1 200 OK'
echo ${#res} # This outputs 16, even though it should be 15

if [ "$res" == "HTTP/1.1 200 OK" ]; then # This never evaluates to true
  echo "It worked"
  exit 1
fi

echo "It did not work"

我检查了res的长度,它是16,我在浏览器的控制台中检查了它,它是15,所以我删除了两端的空格,但是它仍然没有计算为真。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
res_trimmed="$(echo "${res}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"

还是不起作用。

有什么不对的?任何帮助都是非常感谢的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-10 14:28:31

更好的实践实现可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env bash
#              ^^^^- ensure that you have bash extensions available, rather than being
#                    only able to safely use POSIX sh syntax. Similarly, be sure to run
#                    "bash yourscript", not "sh yourscript".

set -o pipefail  # cause a pipeline to fail if any component of it fails

url="https://stackoverflow.com"

# curl -f == --fail => tell curl to fail if the server returns a bad (4xx, 5xx) response
res=$(curl -fsSI "$url" | grep "HTTP/1.1") || exit
res=${res%$'\r'}  # remove a trailing carriage return if present on the end of the line

if [ "$res" = "HTTP/1.1 200 OK" ]; then
  echo "It worked" >&2
  exit 0            # default is the exit status of "echo". Might just pass that through?
fi

echo "It did not work" >&2
exit 1
票数 5
EN

Stack Overflow用户

发布于 2017-11-10 13:44:02

您的问题是,您正在从命令替换中获得返回中的偏离字符。若要消除,只需匹配有效字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GREP='/usr/bin/grep -o'
...
res=$($CURL $CURL_ARGS $url | $GREP 'HTTP/1.1[A-Za-z0-9 ]*')

其他变动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "'$res'" # This outputs 'HTTP/1.1 200 OK'

示例使用/输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sh curltest.sh
'HTTP/1.1 200 OK'
15
It worked
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47231354

复制
相关文章
如何在Linux 系统上比较Bash脚本中的字符串?
在Bash 脚本中比较字符串的需求相对普遍,可用于在继续执行脚本的下一部分之前检查某些条件。
网络技术联盟站
2022/03/06
4K0
如何在Linux 系统上比较Bash脚本中的字符串?
bash字符串匹配
#!/bin/sh foo() {     local basedir=$1     local all_entries=`ls -c`     for entry in $all_entries     do           if test -d $entry; then             cd $entry&&foo ${basedir}/$entry;cd - >/dev/null         else             if [[ $entry
一见
2018/08/07
1K0
Bash遍历字符串列表
大家知道,通过python可以很容易实现各类数据结构,例如列表。但在bash中,实现一个列表相对来说会比较复杂。
zero000
2021/03/23
7K0
Bash遍历字符串列表
字符串比较
网上看到有人也说是他遇到的一道笔试题,那我想这道题目其实还考过很多人。只不过当时是给我笔让我写出来,一下子懵住了,没缓过神来。写的算法时间复杂度为O(n*m),而出题的要求是时间复杂度控制在O(n+m),而且内存和CPU要控制的很小。
meteoric
2018/11/15
2K0
bash 的字符串和数组
回顾下自己接触过的编程语言,字符串和数组真是基础中的基础。也因此,在接触一门新的语言的时候,非常有必要去熟悉该语言的字符串和数组。
IMWeb前端团队
2019/12/04
8180
bash 的字符串和数组
本文介绍了Shell字符串和数组的相关内容。字符串可以使用单引号、双引号或反斜杠进行括号和转义,而数组则可以使用大括号进行括号和初始化。字符串和数组的长度可以使用#或$符号进行获取。对于字符串,还可以使用特殊字符和转义序列进行更复杂的操作。数组操作则可以使用通配符、索引和循环进行。
IMWeb前端团队
2017/12/29
1.2K0
bash中的字符串引用
bash中的字符串引用是一件很简单的事情,我们大多数人对此看一眼就能明了,但是今天这个技巧,也许能够帮你在未来节省不少时间。
大江小浪
2018/07/25
1.1K0
Bash处理字符串系列函数(四)
文章目录 从字符串中去掉第一个出现的模式 去掉字符串开始的模式 去掉字符串末尾的模式 从字符串中去掉第一个出现的模式 示例函数: strip() { # Usage: strip "string" "pattern" printf '%s\n' "${1/$2}" } 示例用法: $ strip "The Quick Brown Fox" "[aeiou]" Th Quick Brown Fox $ strip "The Quick Brown Fox" "[[:space:]]" The
程序员小涛
2021/12/06
3260
[每日一题]字符串的比较
思来想去,相信大家一些基本的语法都差不多了,今天就给大家看一题 题目描述 输入三个字符串,按由小到大的顺序输出 输入 3行字符串 输出 按照从小到大输出成3行 样例输入 cde afg abc 样例输出 abc afg cde PS:条条大路通罗马,解法千奇百怪,题解详见C语言网题库1044题 另外,有兴趣的同学还可以加入C语言网官方微信群,一起讨论C语言 有找密码或者其他问题也可以到里面找相关人员解决 通过加小编:dotcppcom 备注:C语言网昵称(需要先在C语言网注册哦) 就让我们 向着更
编程范 源代码公司
2018/04/18
2.1K0
Golang 字符串比较
字符串比较, 可以直接使用 == 进行比较, 也可用用 strings.Compare 比较
王小明_HIT
2022/02/02
1.8K0
Bash处理字符串系列函数(四)
@TOC 从字符串中去掉第一个出现的模式 示例函数: strip() { # Usage: strip "string" "pattern" printf '%s\n' "${1/$2}" } 示例用法: $ strip "The Quick Brown Fox" "[aeiou]" Th Quick Brown Fox $ strip "The Quick Brown Fox" "[[:space:]]" TheQuick Brown Fox 去掉字符串开始的模式 示例函数: lstri
程序员小涛
2021/02/20
3760
Bash处理字符串系列函数(四)
Go 字符串比较
字符串比较, 可以直接使用 == 进行比较, 也可用用 strings.Compare 比较
王小明_HIT
2022/03/28
1.4K0
php字符串比较
直接比较字符串是否完全一致,可以使用”==”来进行,但是有时候可能需要进行更加复杂的字符串比较,如部分匹配等. 1.strcmp()函数:该函数进行字符串之间的比较,在比较的时候,区分大小写. 声明: strcmp(string str1,string str2) 该函数对传入的两个字符串参数进行比较,如果两个字符串完全相同,则返回0;如果按照字典顺序str1在str2后面,则返回一个正数;如果str1小于str2,则返回一个负数. 例:
Yiiven
2022/12/15
7.2K0
Bash处理字符串系列函数(二)
@TOC 按分隔符拆分字符串 警告: 需要 bash 4+ 这是cut、awk和其他工具的替代品。 示例函数: split() { # Usage: split "string" "delimiter" IFS=$'\n' read -d "" -ra arr <<< "${1//$2/$'\n'}" printf '%s\n' "${arr[@]}" } 示例用法: $ split "apples,oranges,pears,grapes" "," apples oranges pear
程序员小涛
2021/02/20
2670
Bash处理字符串系列函数(二)
Bash处理字符串系列函数(五)
@TOC 百分号编码字符串 示例函数: urlencode() { # Usage: urlencode "string" local LC_ALL=C for (( i = 0; i < ${#1}; i++ )); do : "${1:i:1}" case "$_" in [a-zA-Z0-9.~_-]) printf '%s' "$_" ;;
程序员小涛
2021/02/20
2470
Bash处理字符串系列函数(五)
Bash处理字符串系列函数(一)
这是sed、awk、perl和其他工具的替代品。下面的函数通过查找所有前导和尾随空格并将其从字符串的开头和结尾移除来工作。 内置的:用来代替临时变量。
程序员小涛
2021/12/06
6800
Bash处理字符串系列函数(五)
文章目录 百分号编码字符串 解码百分号编码字符串 检查字符串是否包含子字符串 检查字符串是否以子字符串开头 检查字符串是否以子字符串结尾 百分号编码字符串 示例函数: urlencode() { # Usage: urlencode "string" local LC_ALL=C for (( i = 0; i < ${#1}; i++ )); do : "${1:i:1}" case "$_" in [a-zA-Z0-9.~_
程序员小涛
2021/12/06
3770
Bash处理字符串系列函数(一)
这是sed、awk、perl和其他工具的替代品。下面的函数通过查找所有前导和尾随空格并将其从字符串的开头和结尾移除来工作。
程序员小涛
2021/02/20
8690
Bash处理字符串系列函数(一)
Bash处理字符串系列函数(二)
文章目录 按分隔符拆分字符串 将字符串改为小写 将字符串改为大写 按分隔符拆分字符串 警告: 需要 bash 4+ 这是cut、awk和其他工具的替代品。 示例函数: split() { # Usage: split "string" "delimiter" IFS=$'\n' read -d "" -ra arr <<< "${1//$2/$'\n'}" printf '%s\n' "${arr[@]}" } 示例用法: $ split "apples,oranges,pears,gra
程序员小涛
2021/12/06
3830
Bash处理字符串系列函数(三)
@TOC 反转字符串大小写 警告: 需要 bash 4+ 示例函数: reverse_case() { # Usage: reverse_case "string" printf '%s\n' "${1~~}" } 示例用法: $ reverse_case "hello" HELLO $ reverse_case "HeLlO" hElLo $ reverse_case "HELLO" hello 从字符串中删除引号 示例函数: trim_quotes() { # Usage:
程序员小涛
2021/02/20
3370
Bash处理字符串系列函数(三)

相似问题

BASH字符串比较返回True

22

Bash脚本读取值不符合比较条件

113

为什么bash字符串比较不再等同于true

18

bash字符串比较

30

Bash字符串比较

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文