替换字符串(bash)中最后出现的子字符串
从bash软件手册:替换字符串(bash)中最后出现的子字符串,bash,shell,pattern-matching,substring,variable-expansion,Bash,Shell,Pattern Matching,Substring,Variable Expansion,从bash软件手册: ${parameter/pattern/string} 该模式被扩展以生成一个 模式与文件名扩展中的模式相同。参数被展开,并且 模式与其值的最长匹配替换为字符串。 ... 如果模式以“%”开头,则它必须匹配 在参数展开值的末尾 所以我试过: local new_name=${file/%old/new} 其中字符串是绝对文件路径(/abc/defg/hij和旧的和新的是可变字符串 但是,这似乎是在试图匹配文本%sb1 这个的语法是什么 预期产出: 给定 old=sb1 n
${parameter/pattern/string}
该模式被扩展以生成一个
模式与文件名扩展中的模式相同。参数被展开,并且
模式与其值的最长匹配替换为字符串。... 如果模式以“
%
”开头,则它必须匹配
在参数展开值的末尾
所以我试过:
local new_name=${file/%old/new}
其中字符串是绝对文件路径(/abc/defg/hij
和旧的
和新的
是可变字符串
但是,这似乎是在试图匹配文本%sb1
这个的语法是什么
预期产出:
给定
old=sb1
new=sb2
然后
/foo/sb1/foo/bar/sb1
应该变成/foo/sb1/foo/bar/sb2
/foo/foosb1other/foo/bar/foosb1bar
应变为/foo/foosb1other/foo/bar/foosb2bar
仅使用shell内置:
…正确地发射:
declare -- new="/foo/foosb1other/foo/bar/foosb2bar"
@anubhava很快改变了那里的需求,因为我意识到我真正需要的是什么,尽管它也可以使用文字。
declare -- new="/foo/foosb1other/foo/bar/foosb2bar"