如何防止在这些bash变量中出现空白?
我正在从.ini文件中读取值,有时可能会得到尾随或前导空格 我如何修改第一行以防止出现这种情况如何防止在这些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'
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
包含一个通配符,您将通过globbingecho
不应该这样使用。不要这样做!如果db
包含一个通配符,您将通过globbing<代码>回音不应以这种方式使用。
db=$(crudini --get config.ini '' DB_USERNAME)