在最后一个/在shell脚本中添加路径元素

时间:2016-04-15 19:02:14

标签: bash shell

我有一个像/ 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

非常感谢。

1 个答案:

答案 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 结束,则/会起作用,而不是所提供数据的情况。