Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 字符串与“连接”;[quot;];在shell脚本中生成0_Linux_Bash_Shell - Fatal编程技术网

Linux 字符串与“连接”;[quot;];在shell脚本中生成0

Linux 字符串与“连接”;[quot;];在shell脚本中生成0,linux,bash,shell,Linux,Bash,Shell,在以下代码中,echo$d打印值0 #!/bin/sh printf "Enter the IP address: " read server a=":" b="[" c="]" d=$b$server$c echo $d 如果echo未引用变量,则除其他外,内容会受到全局扩展的影响。一个由开方括号和闭方括号组成的glob,在它们之间有一些东西,shell将其视为一种模式,可以选择其中的任何字符 下面是一个演示: $ mkdir newdir $ cd newdir $ var='[192.1

在以下代码中,echo$d打印值0

#!/bin/sh
printf "Enter the IP address: "
read server
a=":"
b="["
c="]"
d=$b$server$c
echo $d

如果
echo
未引用变量,则除其他外,内容会受到全局扩展的影响。一个由开方括号和闭方括号组成的glob,在它们之间有一些东西,shell将其视为一种模式,可以选择其中的任何字符

下面是一个演示:

$ mkdir newdir
$ cd newdir
$ var='[192.168.0.1]'
$ echo $var     # unquoted
[192.168.0.1]
$ touch 0
$ echo $var     # unquoted
0
$ echo "$var"   # quoted
[192.168.0.1]
如您所见,目录中有一个名为“0”的文件(在
touch
命令之后)。方括号内有一个匹配的“0”。方括号内的字符序列很简单,不是字符串(当变量不带引号时),而是忽略重复的字符。在本例中,
[192.680]
是等效的


教训?目录中有一个名为“0”的文件。解决方案是什么始终在使用变量时引用变量。

您已经在使用
printf
。使用
printf
而不是
echo
。这很好:

printf "Enter the IP address: "
read server
a=":"
b="["
c="]"
d="${b}${server}${c}"
printf "%s\n"  $d
无论何时当您遇到
echo
问题时,您都可以像我显示的那样使用
printf
。事实上,我建议你用它代替echo。下面是一个例子:

echo -n "Enter a string: "
read string
echo "$string"
看起来很简单,但是如果我输入
-foo
作为我的字符串呢?回音将失败。但是,这将起作用:

printf "%s" "Enter a string: "
read string
printf "%s\n" $string
无论您为
$string
输入什么

我确实通过使用引号和大括号更改了
$d
的设置。如果您在设置
d
时不使用引号,并且有人在
中输入您的IP地址的
这*是一个字符串
,您的程序将展开
*
,以匹配目录中的所有th文件。可能是你不想要的东西。大括号只是当变量都像那样粘在一起时,更容易看到它们。另外,它可能会将每个单词放在自己的行中


输入
this*is a test
作为您的IP地址,尝试设置
$d
,不加引号,然后加引号,看看会发生什么情况。

$/test.sh输入IP地址:192.168.0.1[192.168.0.1[
。似乎对我有效。您使用的shell是什么?(也不是您不使用
$c
)这个脚本工作正常,您如何运行它?很抱歉输入错误,当我尝试连接$b时代码会运行,但我希望d作为[IP_地址]您正在使用哪个shell?这在bash中工作正常。我是在一个真正的Bourne shell中长大的;我会自动使用
d=“$b$server$c”
来避免风险(还有
echo“$d”
).我怀疑你们对双引号是否有任何问题。但我也不知道你们为什么会遇到麻烦。