我正在编写一个 bash 脚本来通过cifs
. 我有主要部分工作,但是当我需要用户将 DFS 路径作为变量输入并将反斜杠转换为正斜杠时,我遇到了麻烦。
#!/bin/bash
FILE='\\edi3\welshch\test'
FILEPATH="$("$FILE" | sed -e 's/\\/\//gp')"
echo $FILEPATH
Run Code Online (Sandbox Code Playgroud)
我有另一个脚本,它使用命令来查找 AD 主目录的文件路径,然后按部分通过管道传输到 sed | sed -e 's/\\/\//gp
但是上面的这个脚本给了我;
./test.sh: line 10: \\edi3\welshch\test: command not found
在您拥有的命令替换中"$FILE" | sed -e 's/\\/\//gp'
,shell 将其扩展为(相当于)'\\edi3\welshch\test' | sed -e 's/\\/\//gp'
。由于它是一个command,shell 会寻找一个叫\\edi3\welshch\test
run的文件。
你可能想用的是echo "$FILE" | sed ...
传递的内容FILE
,以sed
通过管道。
请注意,即使这样也不对,有些版本echo
会将反斜杠处理为转义字符,从而将事情搞砸。你需要printf "%s\n" "$FILE" | sed ...
它在所有 shell 中工作。请参阅:为什么 printf 比 echo 好?
另请注意, 的默认行为sed
是在执行任何操作后打印该行。当您/p
在s///
命令上使用时,它会导致额外的打印,因此您会在输出中得到两次结果。
也就是说,由于您使用的是 Bash,您可以只使用字符串替换扩展:
#!/bin/bash
FILE='\\edi3\welshch\test'
FILEPATH=${FILE//\\//}
echo "$FILEPATH"
Run Code Online (Sandbox Code Playgroud)
给出输出 //edi3/welshch/test