从bash软件手册中:
month, hour, day = string.split(' ') month = int(month); hour = int(hour)
模式被扩展以产生一个 模式与文件名扩展一样。展开参数,然后 模式与其值的最长匹配项将替换为字符串。
...如果格式以“${parameter/pattern/string}
”开头,则必须匹配 在参数扩展值的末尾。
所以我尝试了:
%
其中字符串是绝对文件路径(local new_name=${file/%old/new}
以及/abc/defg/hij
和old
是可变字符串。
但是,这似乎试图匹配文字new
。
这是什么语法?
给出
%sb1
然后
old=sb1
new=sb2
应该成为/foo/sb1/foo/bar/sb1
/foo/sb1/foo/bar/sb2
应该成为/foo/foosb1other/foo/bar/foosb1bar
答案 0 :(得分:3)
仅使用内置parameter expansion的shell:
src=sb1; dest=sb2
old=/foo/foosb1other/foo/bar/foosb1bar
if [[ $old = *"$src"* ]]; then
prefix=${old%"$src"*} # Extract content before the last instance
suffix=${old#"$prefix"} # Extract content *after* our prefix
new=${prefix}${suffix/"$src"/"$dest"} # Append unmodified prefix w/ suffix w/ replacement
else
new=$old
fi
declare -p new >&2
...正确发射:
declare -- new="/foo/foosb1other/foo/bar/foosb2bar"