Ale*_*ory 5 bash replace expansion
我知道有更好的方法可以做到这一点.
有什么更好的方法?
你如何在bash中对字符串变量进行字符串替换?
例如:(使用php因为这就是我所知道的)
$path = "path/to/directory/foo bar";
$path = str_replace(" ", "\ ", "$path");
echo $path;
Run Code Online (Sandbox Code Playgroud)
收益:
path/to/directory/foo\ bar
Run Code Online (Sandbox Code Playgroud)
mkl*_*nt0 12
要执行以下特定替换bash:
path='path/to/directory/foo bar'
echo "${path// /\\ }"
Run Code Online (Sandbox Code Playgroud)
$时不要使用前缀.bash=.path使用单引号分配,而字符串替换使用双引号 - 这种区别很重要:bash不解释单引号字符串,而您可以在双引号字符串中引用变量(并执行其他操作); (另外,根本没有引用变量引用有其他后果,通常是不期望的 - 通常,双引号变量引用)字符串替换说明 "${path// /\\ }":
{...}//指定要替换以下搜索模式的所有匹配项(仅/用于替换第一个匹配项)./将搜索模式 (a single space), from the replacement string, \\ .\ 必须表示为\\ ,因为\具有特殊含义作为转义字符.因此必须将其自身逃逸以供字面使用.以上是bash(有点隐蔽)调用shell参数扩展以及参数扩展和[参数和]变量扩展的实例.还有更多的风格,例如提取子字符串,提供默认值,剥离前缀或后缀,... - 请参阅主题或手册上的BashGuide页面.
至于搜索和替换字符串支持哪些类型的表达式:
*.txt); 例如,v='dear me'; echo "${v/m*/you}"收益率'dear you'.请注意,将使用最长匹配.
/正如我们在上面看到的那样,导致模式的所有匹配出现都被替换 - 默认情况下,只替换第一个模式.#导致模式的其余部分仅在输入变量的开头匹配%只有在比赛结束$(...),...; 例如:
v='sweet home'; echo "${v/home/$HOME}"例如,收益率'sweet /home/jdoe'.v='It is now %T'; echo "${v/\%T/$(date +%T)}"例如,收益率It is now 10:05:17.o1=1 o2=3 v="$o1 + $o2 equals result"; echo "${v/result/$(( $o1 + $o2 ))}"收益率'1 + 3 equals 4'(我认为)还有更多功能和细微之处 - 请参阅上面的链接.
| 归档时间: |
|
| 查看次数: |
4412 次 |
| 最近记录: |