参数扩展不适用于变量

时间:2015-12-09 09:47:14

标签: bash

我试图使用参数扩展将此字符串$line分解为不同的子字符串。

# bool db/setting/accessibility/tts val="some value here"
line="bool db/setting/accessibility/tts val=\"some value\""
#
# step 1
data_type=${line%% *}
echo $data_type         #bool
remain_str=${line#"$data_type"} #this doesn't work
echo $remain_str                #db/setting/accessibility/tts val="some value"
remain_str=${line# *}           #this works
echo $remain_str                #db/setting/accessibility/tts val="some value"

我正在阅读本指南http://mywiki.wooledge.org/BashFAQ/073

如何使用变量而不是常量字符串或字符进行参数扩展&我怎样才能同时使用两者?

例如

当我使用remain_str=${line#"$data_type"}时 字符串应该被剥离数据类型 并echo $remain_str应打印db/setting/accessibility/tts

1 个答案:

答案 0 :(得分:2)

您的代码在sh,bash和dash中按预期工作:

#!/bin/bash
line="bool db/setting/accessibility/tts val=\"some value\""
data_type=${line%% *}
echo $data_type
remain_str=${line#"$data_type"}
echo $remain_str
remain_str=${line# *}
echo $remain_str

我检查的所有三个shell都产生相同的输出:

bool
db/setting/accessibility/tts val="some value"
bool db/setting/accessibility/tts val="some value"

如果我将最后一次替换改为"${line#* }",我得到的最后一行与第二行相同。