String 在bash中使用回车符执行字符串比较

String 在bash中使用回车符执行字符串比较,string,bash,shell,sh,String,Bash,Shell,Sh,为什么下面的代码在bash中失败?注意,我正在尝试执行更复杂的比较,例如“somestring\r”;这只是一个简单的例子 我可以确认回车“ascii 13”已进入脚本。但是我不能用常规的字符串比较来比较它 正匹配的预期结果为“1” 命令行: echo -e "\r" | ./test.sh 脚本: ord() { printf '%d' "'$1" } read a echo "1st char: $(ord ${a:0:1})" left="${a:0:1}" if [ "$l

为什么下面的代码在bash中失败?注意,我正在尝试执行更复杂的比较,例如“somestring\r”;这只是一个简单的例子

我可以确认回车“ascii 13”已进入脚本。但是我不能用常规的字符串比较来比较它

正匹配的预期结果为“1”

命令行:

echo -e "\r" | ./test.sh
脚本:

ord() {
   printf '%d' "'$1"
}

read a
echo "1st char: $(ord ${a:0:1})"

left="${a:0:1}"

if [ "$left" = "\r" ]; then
   echo 1
fi

exit 0

下面将说明如何确定字符串是否包含回车符:

read a
if [[ $a =~ $'\r' ]]; then
  echo 1;
fi
执行时说:

echo -e "something\r" | bash foo
会回来吗

1

编辑:如果要计算字符串的最后一个字符是否包含回车符,可以说:

if [[ ${a: -1} = $'\r' ]]; then
  echo 1;
fi

这是一个很好的尝试,但我想要的是对子字符串执行精确的匹配比较。只需将
=~
替换为
=
$“…”
语法对于正则表达式匹配不是特殊的;这只是一种构造字符串的方法,其中某些转义字符具有特殊意义。@Zhro chepner已经在评论中提到过。不过,请看上面的编辑。谢谢你,切普纳,这看起来确实有效。为了确认这一点,如果我还想包括bash变量扩展,我必须这样构造它:
测试“$”\r'
以匹配
测试\r
,对吗?现在我想起了“$”语法,但我很少使用它,我忘记了!