如何通过使用sh来回显一个双反斜杠加variables(版本号)如“\\ hostname \ release \ 1.02A01”

我想在Linux shell脚本中向用户回显Windows共享文件夹地址,地址是这样的string:\\ hostname \ release \ 1.02A01。 和最后一个string(1.02A01)是一个版本号,它每次运行脚本时都会改变。 我在sh(而不是bash)中尝试了这样的东西,但是它不起作用:

version=$1 # version number are get from the parameter repository="\\\hostname\release\$version" echo $repository # I get this: \hostname\dir$version 

这是两个错误:

  1. 双反斜杠是不正确的。
  2. 该版本未正确parsing。

1)在unix / linux sh中,反斜杠(“\”)必须被转义/在反斜杠(“\”)之前。
2)你正在做INSIDE引号的字符串连接是LITERAL,如果你想要$ version的值,你必须把它放在结尾的引号之外。

我把它放在一个shell(shell1)中,并在“sh”下执行:

 sh-4.1# cat shell1 version=$1 repository="\\\\hostname\\release\\"$version echo $repository 

这是输出:

 sh-4.1# ./shell1 1.02A01 <br> \\hostname\release\1.02A01 

为避免需要转义反斜杠,请使用单引号而不是双引号。

 repository='\\hostname\release\'"$version" 

$version需要双引号才能使参数展开。 两个彼此相邻的带引号的字符串被连接成一个字符串。

BASH越狱陷阱

也许尝试:

 version=`echo $1` repository='\''\hostname\release\'$version 

经测试:

〜$猫堆栈

 #!/bin/bash string="1.02A01" version=`echo $string` repository='\''\hostname\release\'$version echo $repository 

〜$ bash堆栈

 \\hostname\release\1.02A01 

不要使用echo来输出文本,而是使用printfecho命令有几个可移植性问题, printf函数更容易使用,因为它具有清晰的“打印我的意思”部分 – 格式字符串 – 带有用于替换文本的占位符。

 repository="\\\\hostname\\release\\$version" printf '%s\n' "$repository" 

您应该保留对最简单的信息位使用echo ,如跟踪消息,甚至根本不使用它。