如何检测bash中可能包含空格的空字符串?

时间:2016-09-17 09:44:14

标签: bash

我想通过

检测空字符串和白色字符串
not detect

结果是

if [[ -z ${var} ]]

它不起作用。 请让我知道如何检测它。 或者,请告诉我一些选项,如

 if ( isset($_POST['multiagent'] ) && is_array ( $_POST['multiagent']  ) ) {

    //implode user name in string 
    $studentname = implode("','",$_POST['multiagent']);

    //Write query string
    $query_certs = "SELECT * FROM transactions WHERE Username IN ('". $studentname ."')";

    //Add limit in query
    $query_limit_certs = sprintf("%s LIMIT %d, %d", $query_certs, $startRow_certs, $maxRows_certs);

    //Execute query
    $certs = mysql_query($query_limit_certs, $kbl) or die(mysql_error());

    //Get row
    $row_certs = mysql_fetch_assoc($certs);
}

1 个答案:

答案 0 :(得分:3)

\s与BASH中的空格不匹配(它只匹配单个字段s),您可以使用POSIX属性[[:blank:]]来匹配空格或制表符:

if [[ ${test_word} =~ ^[[:blank:]]*$ ]]; then
  echo "detect"
else
  echo "not detect"
fi

这是一种检测相同方法的非正则表达式:

if [[ -z ${test_word//[[:blank:]]/} ]]; then
    echo "detect"
else
    echo "not detect"
fi

${test_word//[[:blank:]]/}将从$test_word删除所有空格,-z将检查给定字符串的长度是否为零。

以下是检测相同内容的另一种extglob方式(感谢@gniourf_gniourf):

if [[ ${test_word} == *([[:blank:]]) ]]; then
    echo "detect"
else
    echo "not detect"
fi