通常我使用bash 中的构造来替换字符。${parameter/pattern/string}
例如,用 替换中的${i//(/_}
所有(
字符。举例来说:_
$i
find . -depth -type d -name '*(*' -execdir bash -c 'for i; do mv "$i" "${i//(/_}"; done' _ {} +
我无法让它与 一起工作~
。 即使它包含波浪符号,${i//~/_}
也会产生 的值 ,保持不变。$i
这很奇怪——除了问号,它与我使用的所有其他符号都兼容。您对波浪符号有什么想法吗?
答案1
重击(1)没有清楚地记录这样一个事实:当你这样做时
${范围/图案/细绳}这
pattern
和string
会受到命令行中适用于普通(未加引号)单词的所有扩展的影响。请考虑以下示例:
$ balance=credit
$ fire=red
$ sky=blue
$ echo "${balance/$fire/$sky}"
cblueit
当然,你的问题是它~
扩展到你的主目录:
$ i=foo/home/JandPbar
$ echo "${i/~/_}"
foo_bar
因此,正如评论中所建议的,您需要用~
或"${i/'~'/_}"
来引用/转义"${i/\~/_}"
。