我试图使用参数扩展将此字符串$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
答案 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#* }"
,我得到的最后一行与第二行相同。