如何防止在这些bash变量中出现空白?

如何防止在这些bash变量中出现空白?,bash,shell,ini,Bash,Shell,Ini,我正在从.ini文件中读取值,有时可能会得到尾随或前导空格 我如何修改第一行以防止出现这种情况 db=$(sed -n 's/.*DB_USERNAME *= *\([^ ]*.*\)/\1/p' < config.ini); echo -"$db"- 我需要 -myinivar- 使用 使用 您不需要捕获组中的*(或行尾的分号): db=“$(sed-n's/*db\u USERNAME*=*\([^]*\)./\1/p'

我正在从.ini文件中读取值,有时可能会得到尾随或前导空格

我如何修改第一行以防止出现这种情况

db=$(sed -n 's/.*DB_USERNAME *= *\([^ ]*.*\)/\1/p' < config.ini);
echo -"$db"-
我需要

-myinivar-
使用

使用


您不需要捕获组中的
*
(或行尾的分号):

db=“$(sed-n's/*db\u USERNAME*=*\([^]*\)./\1/p'
详细说明:

  • *
    与任何东西都匹配
  • DB_USERNAME
    与该文本字符串匹配
  • *
    (一个空格后跟一个星号)匹配任意数量的空格
  • =
    匹配该文本字符串
  • *
    (一个空格后跟一个星号)匹配任意数量的空格
  • \(
    启动稍后用于
    \1
    的捕获组
  • [^]
    匹配任何非空格字符的内容
  • *
    重复该操作零次或多次
  • \)
    结束捕获组
  • *
    与任何东西都匹配

  • 因此,结果将是
    DB_USERNAME=
    之后的所有字符和任意数量的空格,直到下一个空格或行尾,以先到者为准。

    您不需要捕获组内的
    *
    (或行尾的分号):

    db=“$(sed-n's/*db\u USERNAME*=*\([^]*\)./\1/p'
    详细说明:

  • *
    与任何东西都匹配
  • DB_USERNAME
    与该文本字符串匹配
  • *
    (一个空格后跟一个星号)匹配任意数量的空格
  • =
    匹配该文本字符串
  • *
    (一个空格后跟一个星号)匹配任意数量的空格
  • \(
    启动稍后用于
    \1
    的捕获组
  • [^]
    匹配任何非空格字符的内容
  • *
    重复该操作零次或多次
  • \)
    结束捕获组
  • *
    与任何东西都匹配

  • 因此,结果将是
    DB_USERNAME=
    之后的所有字符和任意数量的空格,直到下一个空格或行尾,以先到者为准。

    要去掉多个尾随空格,请使用%%,从字符串末尾删除最长的匹配模式


    echo“=${db%%*}=“

    若要删除多个尾随空格,请使用%%删除字符串末尾最长的匹配模式


    echo”=${db%%*}=“

    您可以使用
    echo
    来修剪空白:

    db='myinivar '
    echo -"$(echo $db)"-
    -myinivar-
    

    您可以使用
    echo
    来修剪空白:

    db='myinivar '
    echo -"$(echo $db)"-
    -myinivar-
    

    使用crudini透明地处理这些ini文件边缘情况

    db=$(crudini --get config.ini '' DB_USERNAME)
    

    使用crudini透明地处理这些ini文件边缘情况

    db=$(crudini --get config.ini '' DB_USERNAME)
    

    将捕获内容从
    \([^]*.\)
    更改为
    \([^]*\)
    *
    有什么用途吗?将捕获从
    \([^]*.\)
    更改为
    \([^]*\)
    *
    ?我想,搜索部分应该是
    *DB\u USERNAME*=*\([^]*\).
    ,以删除感兴趣的输出后的任何`*\。我想,搜索部分应该是
    *DB\u USERNAME*=*\([^]*\).
    ,以删除感兴趣的输出后的任何`*\。不要这样做!如果
    db
    包含一个通配符,您将通过globbing
    echo
    不应该这样使用。不要这样做!如果
    db
    包含一个通配符,您将通过globbing<代码>回音
    不应以这种方式使用。
    db=$(crudini --get config.ini '' DB_USERNAME)