我想创建一个带有“纯”UNC(即我不想从字面上转义反斜杠)作为参数的bash脚本,即类似:
./foo \\my\share\is\here
然而,很自然,上面的脚本是这样的:
\我的分享在这里
我可以以某种方式读取确切的 UNC 作为参数并将其存储在变量中吗?
答案1
使用单引号:
[root@xxx601 ~]# ./stack \\my\share\is\here
You Gave Me: \myshareishere
[root@xxx601 ~]# ./stack '\\my\share\is\here'
You Gave Me: \\my\share\is\here
答案2
如果您想在 shell 脚本中运行./foo
带有参数的命令,那么您需要使用某种形式\\my\share\is\here
引用,因为反斜杠字符具有 shell 的特殊含义。最简单的引用形式是在参数两边加上单引号:一对单引号之间的所有内容都按字面意思处理,唯一不能以这种方式包含的字符是单引号字符本身。
./foo '\\my\share\is\here'
如果您的脚本是foo
并且您想在命令行上使用参数运行它\\my\share\is\here
,那么您也需要使用引用(命令行是一个 shell)。
如果您输入./foo \\my\share\is\here
,则foo
无法知道您输入的内容。运行的 shellfoo
会解析命令行,并确定后面的空格./foo
是单词分隔符,第一个单词是要执行的命令名称,第二个单词是参数,并且字符序列的形式为反斜杠+某物代表角色某物。这和你写的现象是一样的foo ; bar
:这是一个要运行的 shell 命令foo
,然后bar
;它不会将字符串传递; bar
给foo
.类似地,使用参数./foo \\my\share\is\here
运行。例如,如果您想使用参数运行,则需要写下您的意思 (或或或任何其他变体)。./foo
\myshareishere
./foo
\\my\share\is\here
./foo '\\my\share\is\here'
./foo \\\\my\\share\\is\\here
./foo '\'"\\m"y\\share'\is\'"here"""