外壳脚本。 我的脚本中的命令替换问题
在我的 Cygwin 和 Linux 盒子 (Debian) 上,我都遇到了同样的问题:
我正在使用某种格式化 id 的 shell 脚本,我想在斜杠出现 (/) 之前添加反斜杠 ()。
我的 sed 脚本在我的终端上运行良好:
# export someid="314-12345/08"
# echo "${someid}" | sed 's/\//\\\//'
输出:
314-12345\/08
但如果我运行 命令替换:
# someidformatted=`echo "${someid}" | sed 's/\//\\\//'`
sed: -e expression #1, char 9: unknown option to `s'
我在这里缺少什么?
先感谢您。
On both, my Cygwin and my Linux box (Debian) I'm experiencing same issue:
I'm working in a shell script with some kind of formatting ids, I want to add a backslash () before a slash occurrence (/).
My sed script is working well at my terminal:
# export someid="314-12345/08"
# echo "${someid}" | sed 's/\//\\\//'
Output:
314-12345\/08
But not as well if i run command substitution:
# someidformatted=`echo "${someid}" | sed 's/\//\\\//'`
sed: -e expression #1, char 9: unknown option to `s'
What I'm missing here?
Thank you in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有义务使用 / 作为 sed 的分隔符。
可能会变成
在你的情况下
这样:会完成这项工作。
我只能猜测问题是由于缺少/转义引起的。
There's no obligation to use / as the separator for sed.
May become
So in your case:
would do the job.
I can only guess that the problem was caused by some lack of / escaping.
这是正在发生的事情。 从 bash(1) 手册页中,强调我的:
因此,与普通命令相比,您很可能需要更多的反斜杠来进行命令替换。
您可以通过设置
set -x
进行调试:因此,您可以看到
\\
的出现变成了\
。 添加更多反斜杠是可行的,但我更喜欢$(command)
形式:Here's what is going on. From the bash(1) man page, emphasis mine:
So most likely you need more backslashes for the command substitution than a plain command.
You can debug this by setting
set -x
:So, you can see that an occurrence of
\\
gets turned to\
. Adding more backslashes works, but I prefer the$(command)
form: