如果变量在bash中是多线还是不是多线的快速方法?

时间:2015-10-28 17:27:25

标签: regex bash

在BASH中寻找一种快速方法来测试我的变量是单线还是多线?我认为以下内容可行,但它总是以no

的形式返回
input='foo
bar'

regex="\n" ; [[ $regex =~ "${input}" ]] && { echo 'yes' ; } || { echo 'no' ; }

3 个答案:

答案 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中),则会失败。