English 中文(简体)
如果在Bash的表态,我如何比较两个示意图变量? [复制]
原标题:How do I compare two string variables in an if statement in Bash? [duplicate]

http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29”rel=“noreferer”>Bash (使用Ubuntu:

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi

I ve Trial various forms of the if statement, using [[s1” = “$s2”], with and without quotes, using =,= and -eq/code>, but I still have below:

[i:没有发现指挥

我审视了各个地点和辅导,并抄录了这些网站,但是,这确实是徒劳的——我做了什么错?

最后,我要说,<代码>1包含$2,以便我能如何做到这一点?

我只是做了以下工作: 我怎么说?

审判

if [[ "$s1" == "*$s2*" ]]

但它没有工作。

最佳回答

强化平等比较:

if [[ "$s1" == "$s2" ]]

NOT对地体进行平等比较,使用:

if [[ "$s1" != "$s2" ]]

www.un.org/Depts/DGACM/index_french.htm

if [[ $s1 == *"$s2"* ]]

(并确保在符号之间增加空间):

Bad:

if [["$s1" == "$s2"]]

良好:

if [[ "$s1" == "$s2" ]]
问题回答

您应当谨慎地在“变量”的标语之间留下一个空间:

if [ "$s1" == "$s2" ]; then
#   ^     ^  ^     ^
   echo match
fi

你们需要空间:

if [ "$s1" == "$s2" ]

我建议:

if [ "$a" = "$b" ]

将开放/封闭的方括号与变数之间的白色空间以及填平标识的白色空间通知。

此外,还要仔细看你的书写人。 你们是否使用同样的东西。

#!/bin/bash

#!/bin/sh

Here s the source.

Bash 4+ 实例。 注:在字数包含空间时,不使用引文会造成问题。 Always quote in Bash IMO.

以下是一些例子。 Bash 4+:

例1. 体力检查(不敏感情况):

if [[ "${str,,}" == *"yes"* ]] ;then

例2. 体力检查(不敏感情况):

if [[ "$(echo "$str" | tr  [:upper:]   [:lower:] )" == *"yes"* ]] ;then

例3:在体内检查(敏感情况):

 if [[ "${str}" == *"yes"* ]] ;then

例4:在体内检查(敏感情况):

 if [[ "${str}" =~ "yes" ]] ;then

例5. 准确匹配(敏感情况):

 if [[ "${str}" == "yes" ]] ;then

例6. 准确匹配(不敏感的情况):

 if [[ "${str,,}" == "yes" ]] ;then

例7. 准确对应:

 if [ "$a" = "$b" ] ;then

这个问题已经有了很大的答案,但在此看来,在使用单一平等(=)和双重等值(=)之间似乎有点混淆。 页: 1

if [ "$s1" == "$s2" ]

主要的区别在于你使用的语言。 如果你使用Bash,则在文字开始时列入<条码>#!/bin/bash,并将你的文字作为<条码>。 执行,使用<代码>bash文档名称。 bash - 然后,您必须使用=

如果您使用sh 然后使用<代码>#!/bin/sh,并作为filename.sh予以节省。 为了使用<代码>sh filename.sh-,你必须使用=。 避免将它们混为一谈。

我建议:

#!/bin/bash

s1="hi"
s2="hi"

if [ $s1 = $s2 ]
then
  echo match
fi

如果没有双重引用,只有一份等于/em>。

$ if [ "$s1" == "$s2" ]; then echo match; fi
match
$ test "s1" = "s2" ;echo match
match
$

现在我没有接触到一个箱子,但<代码>[实际上是一个方案(和一个Bash内面),因此我认为你必须在<代码>[和第一个参数之间留出空间。

还指出,扼杀平等操作者似乎是单一=

这不仅仅是一个答案! 是的,该术语在错误信息中:

[i:没有发现指挥

这表明你“我”被困于“......”。

与较传统的方案拟订语言不同的是,在巴什,“......”是一种指挥,就像较为明显的“ls”,等等——它并非仅仅因为其具有象征意义而得到特别对待,因此,“[”和(替代的)“$1”在你的问题中相互交织在一起(对巴什而言是正确的),然后试图在该职位上找到指挥:[我——巴什人不知道。

在C和其他一些语文中,“......”将被视为一种不同的“组合”类别,并将与以下“hi”脱节。

因此,在“......”开放后,你需要一个空间。

使用:

#!/bin/bash

s1="hi"
s2="hi"

if [ "x$s1" == "x$s2" ]
then
  echo match
fi

添加一条内线,使之更为安全。

你们还可以使用另一条单线指令:

[ "x$s1" == "x$s2" ] && echo match

a 仅使用Bash和没有的版本的>,但实际上只是尝试:

if ( exit "${s1/*$s2*/0}" )2>/dev/null
then
   echo match
fi

解释:(>) > 开启了额外的小子。 如果没有对账,则从0美元中提取,如果没有对账,则试图从1美元中提取。 这一错误指<代码>/dev/null。





相关问题
What does it mean "to write a web service"?

I just asked a question about whether it was possible to write a web-page-checking code and run it from free web server, and one supporter answered and said that it was possible only if I run "a web ...

How can I use exit codes to run shell scripts sequentially?

Since cruise control is full of bugs that have wasted my entire week, I have decided the existing shell scripts I have are simpler and thus better. Here is what I have so far svn update /var/www/...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Why does Scala create a ~/tmp directory when I run a script?

When I execute a Scala script from the command line, a directory named "tmp" is created in my home directory. It is always empty, so I simply deleted it without any apparent problem. Of course, when I ...

Ivy, ant and start scripts

I have a project that uses ant to build and ivy for dependencies. I would like to generate the start scripts for my project, with the classpath, based on the dependencies configured in Ivy, ...