【发布时间】:2019-10-31 19:14:22
【问题描述】:
`我有一个脚本,我试图从清单文件中读取,将该清单中的 DOS 路径转换为 UNIX 路径,然后对这些文件进行操作。这是我正在尝试调试的一段 sn-p 代码:
while read line
do
srcdir=$(printf '%s' "$line" | awk -F \\ -v OFS=/ '{ gsub(/\r|^[ \t]+|[ \t]+$/, "") } !NF { next } /^\\\\/ { sub(/^.*\\prj\\/, "\\prj\\") } { $1 = $1 } 1')
done < manifest.txt
我的输入文件如下所示:
$ cat manifest.txt
\\server\mount\directory
当我调试我的小 shell sn-p 时,我得到以下信息:
+ read line
++ printf %s '\servermountdirectory
'
++ awk -F '\' -v OFS=/ '{ gsub(/\r|^[ \t]+|[ \t]+$/, "") } !NF { next } /^\\\\/ { sub(/^.*\\prj\\/, "\\prj\\") } { $1 = $1 } 1'
+ srcdir=\servermountdirectory
所以...无论是在 read 还是在 printf,\ 字符都被解释为转义字符——我该如何解决这个问题?
注意...我知道我可以在 awk 中运行 while 循环...问题是在我的实际程序中,while 循环中还有其他内容需要使用"$srcdir" 完成——为此,sh 是正确的工具...所以我真的需要 sh 中的解决方案。
【问题讨论】:
-
我认为这不完全是 [重复] - 因为在这种情况下,我不知道是
printf还是读到这是问题所在,无法想办法告诉区别......但这是你的电话。 ;) 我真的很感激这里的答案。卡米尔很准确,艾伦也有一些好东西要补充。