在BASH中寻找一种快速方法来测试我的变量是单线还是多线?我认为以下内容可行,但它总是以no
input='foo
bar'
regex="\n" ; [[ $regex =~ "${input}" ]] && { echo 'yes' ; } || { echo 'no' ; }
答案 0 :(得分:3)
您不需要正则表达式,因为您可以使用glob模式来检查:
[[ $str == *$'\n'* ]] && echo "multiline" || echo "single line"
如果在$str == *$'\n'*
中找到任何换行符, $str
将返回true。
答案 1 :(得分:1)
如下所示更改正则表达式
$ regex="[\\r\\n]"
$ [[ "${input}" =~ $regex ]] && { echo 'yes' ; } || { echo 'no' ; }
yes
答案 2 :(得分:0)
您不需要使用正则表达式。只需删除不是"新行"的所有内容,并计算字符数:
str=$'foo\nbar\nbaz'
不调用任何永恒的程序(纯粹的bash):
b=${str//$'\n'}; echo $(( ${#str} - ${#b} ))
打印的数字是新行数。
另一种解决方案是在\n
处剪切变量,并查找它是否变短:
b="${str%%$'\n'*}"; (( ${#b} < ${#str} )) && echo "Multiline"
请注意,如果行结尾为\c
(一个CR,如经典MAC中),则会失败。