我有一个像/ abc / def / ghi这样的目录路径,我想在最后一个&#34; /&#34;之后添加一个元素,所以应该是/ abc / def / xyz / ghi。< / p>
${string/%substring/replacement}
If $substring matches back end of $string, substitute $replacement for $substring.
但如果我回显$ finalPath,它与$ dir相同,没有添加任何东西。有人能让我知道我的代码有什么问题。我从中获得了替换systax not allowed,
Item.solr_search do
fulltext self.q do
phrase_fields full_title: 16.0 # pf: full_title_text^16.0
phrase_slop 1
boost_fields ean: 8.0 # qf: ean_text^8.0
boost_fields author_names: 2.0 # qf: author_names_text^2.0
boost_fields publisher_name: 2.0 # qf: publisher_name_text^2.0
end
adjust_solr_params do |params|
params[:boost] = "popularity_score"
end
end
非常感谢。
答案 0 :(得分:3)
# Quoting below is optional, for the benefit of SO's syntax highlighting
finalPath="${dir%/*}/xyz/${dir##*/}"
这分三个阶段:
${dir%/*}
删除了最后一个/
及其后的所有内容/xyz/
扩展到自己,当然${dir##*/}
删除之前的最后/
至于原始this is discussed in the bash-hackers wiki中使用的锚定语法,在"Search and Replace"下的锚点子标题中:
锚定 - 此外,您可以&#34;锚定&#34;表达式:
#
(hashmark)表示您的表达式与字符串的开头部分匹配,%
(百分号)将对结尾部分进行匹配。MYSTRING=xxxxxxxxxx echo ${MYSTRING/#x/y} # RESULT: yxxxxxxxxx echo ${MYSTRING/%x/y} # RESULT: xxxxxxxxxy
但是,这与最后的匹配,而不仅仅是最近末尾的位置。因此,如果${dir/%$findStr/$replaceStr}
中的$dir
结束,则/
会起作用,而不是所提供数据的情况。