我遇到BASH脚本问题
我有一个变量,它在curl命令中填充了一个字符串,这个字符串通常是两个带空格的单词。空格不是\ x20而是十六进制的\ x0A,这会产生回车,我想反击。
我无法控制返回的字符串,因为它从Google获取数据
是否有一种简单的方法来检查字符串变量是否包含\ x0A十六进制? 是否可以操作字符串,将\ x0A值更改为\ x20
提前致谢;)
答案 0 :(得分:1)
您可以使用bash的内置参数扩展将所有空格转换为普通空格:
a=$' a\rb\nc'
$ echo "$a"
ba
c
$ a="${a//[[:space:]]/ }"
在其他shell上,您可以使用tr
执行相同操作,但代价是调用外部进程并创建子shell:
$ a=$(printf '%s' "$a" | tr '[:space:]' ' ')
在任何一种情况下,结果都是:
$ echo "$a"
a b c
答案 1 :(得分:0)
是否有一种简单的方法来检查字符串变量是否包含\ x0A十六进制?是否可以操作字符串,将\ x0A值更改为\ x20
是的,是的。
正如Tom建议的那样,您可以使用bash中的参数扩展或任何shell中的tr
来操作字符串。
如果您首先要检查字符串是否包含特殊字符,bash的内置测试功能将完成此任务。
$ s=$'a\rb\r'; [[ $s == *$'\n'* ]] && echo "Yes"
$ s=$'a\rb\n'; [[ $s == *$'\n'* ]] && echo "Yes"
Yes