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

时间:2014-04-25 11:29:54

标签: bash shell ini

我正在读取.ini文件中的值,有时可能会跟踪或引导空格。

如何修改第一行以防止这种情况?

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

结果;

-myinivar -

我需要;

-myinivar-

5 个答案:

答案 0 :(得分:2)

使用parameter expansion

echo "=${db% }="

答案 1 :(得分:1)

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

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

详细说明:

  1. .*匹配任何内容
  2. DB_USERNAME匹配该文字字符串
  3. *(单个空格后跟星号)匹配任意数量的空格
  4. =匹配该文字字符串
  5. *(单个空格后跟星号)匹配任意数量的空格
  6. \(启动稍后用于\1的捕获组
    1. [^ ]匹配空格字符
    2. 的任何内容
    3. *重复零次或多次
  7. \)结束捕获组
  8. .*匹配任何内容
  9. 因此,结果将是DB_USERNAME =之后的所有字符和任意数量的空格,直到下一个空格或行尾,以先到者为准。

答案 2 :(得分:1)

您可以使用echo修剪空白:

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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