lol*_*rog 10 shell bash string
在网络的各个地方,我发现:
\015
\012
\x0a - hex
\n
\r
Run Code Online (Sandbox Code Playgroud)
都作为各种换行符/回车的同义词...
但是在这个小脚本中,当我遇到换行符时我无法识别 - 有人可以告诉我应该在 if 行中检查什么吗?
#!/bin/bash
test="this is a
test"
for a in "$test"; do
if [[ "$a" == '\012' ]] ; then
echo "FOUND NEWLINE"
fi
echo "$a"
done
Run Code Online (Sandbox Code Playgroud)
如果您直接在for循环下使用字符串,它将对每个单词起作用(这里是一个单词:$test因为它被引用的全部内容),而不是每个字符。您需要使用while循环 withread来逐个解析字母,或者引入一个可以遍历字符串的数字参数。
此外,在使用 时read,您需要确保不会将换行符和空格解释为分隔符并强制一次read读取一个字符。
这是一个工作版本:
#!/bin/bash
test="this is a
test"
printf %s "$test" | while IFS= read -r -N 1 a; do
if [[ "$a" == $'\n' ]] ; then
echo "FOUND NEWLINE"
fi
printf %s "$a"
done
Run Code Online (Sandbox Code Playgroud)
您可以$'\n'用$'\012'或替换$'\x0a',因为它们都表示相同的换行代码。但它与\015or 不同\r- 这代表回车(返回到行首)。在 Linux 系统上,换行符用 表示\n,但例如在 Windows 上,它们用 的序列\r\n代替。这就是为什么如果您有来自 Windows 的文本文件,您也可以通过搜索\r.