sou*_*els 3 linux bash shell scripting cygwin
在我的Cygwin和我的Linux盒子(Debian)上,我遇到了同样的问题:
我正在使用某种格式化ID的shell脚本,我想在斜杠出现(/)之前添加反斜杠().
我的sed脚本在我的终端上运行良好:
# export someid="314-12345/08"
# echo "${someid}" | sed 's/\//\\\//'
Run Code Online (Sandbox Code Playgroud)
输出:
314-12345\/08
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行命令替换不是很好:
# someidformatted=`echo "${someid}" | sed 's/\//\\\//'`
sed: -e expression #1, char 9: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
先感谢您.
Grz*_*zki 13
没有义务使用/作为sed的分隔符.
s/a/c/
Run Code Online (Sandbox Code Playgroud)
可能会变成
s#a#c#
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
someidformatted=`echo "${someid}" | sed 's#\/#\\\/#'`
Run Code Online (Sandbox Code Playgroud)
会做的.
我只能猜测问题是由于某些缺乏/逃避造成的.
这是正在发生的事情.从bash(1)手册页,强调我的:
当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,'或\. 第一个不带反斜杠的反引号会终止命令替换.使用$(命令)表单时,括号之间的所有字符组成命令; 没有人特别对待.
因此,与普通命令相比,命令替换需要更多的反斜杠.您可以通过设置调试set -x:
# someidformatted=`echo "${someid}" | sed 's/\//\\\//'`
++ echo 314-12345/08
++ sed 's/\//\\//'
sed: 1: "s/\//\\//": bad flag in substitute command: '/'
+ someidformatted=
# someidformatted=$(echo "${someid}" | sed 's/\//\\\//')
++ echo 314-12345/08
++ sed 's/\//\\\//'
+ someidformatted='314-12345\/08'
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到\\转向的事件发生了\.添加更多反斜杠有效,但我更喜欢这种$(command)形式:
# someidformatted=$(echo "${someid}" | sed 's/\//\\\//')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5190 次 |
| 最近记录: |