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

Zhr*_*hro 4 string bash shell sh

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

我可以确认回车符“ascii 13”正在进入脚本。但我无法将其与常规字符串比较进行比较。

积极匹配的预期结果是“1”。

命令行:

echo -e "\r" | ./test.sh
Run Code Online (Sandbox Code Playgroud)

脚本:

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
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 5

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

read a
if [[ $a =~ $'\r' ]]; then
  echo 1;
fi
Run Code Online (Sandbox Code Playgroud)

执行它时说:

echo -e "something\r" | bash foo
Run Code Online (Sandbox Code Playgroud)

会回来

1
Run Code Online (Sandbox Code Playgroud)

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

if [[ ${a: -1} = $'\r' ]]; then
  echo 1;
fi
Run Code Online (Sandbox Code Playgroud)

  • 只需将“=~”替换为“=”即可。`$'...'` 语法对于正则表达式匹配来说并不特殊;它只是构造字符串的一种方法,其中某些转义字符具有特殊含义。 (2认同)