意外的操作员错误

wea*_*ock 26 bash jar find

我的代码有什么问题?

#!/bin/sh

LOOK_FOR="$1"

for i in `find $2 -name "*jar"`; do
  echo "Looking in $i ..."
  #jar tvf $i | grep $LOOK_FOR > /dev/null
  jar tvf "$i" | grep "$LOOK_FOR" 

  if [ $? == 0 ] ; then
    echo "==> Found \"$LOOK_FOR\" in $i"
  fi  
done #line 13
Run Code Online (Sandbox Code Playgroud)

产量

wk@wk-laptop:$ sh lookjar.sh org/apache/axis/message/addressing/EndpointReference  /media/0C06E20B06E1F61C/uengine/uengine
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/build/uengine_settings.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/WebContent/uengine-web/lib/FCKeditor/WEB-INF/lib/commons-fileupload.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/WebContent/uengine-web/lib/FCKeditor/WEB-INF/lib/FCKeditor-2.3.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/WebContent/uengine-web/processmanager/signedmetaworks.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/hsqldb/lib/hsqldb.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/hsqldb/lib/servlet.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/src/lib/commons-discovery.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/src/lib/google.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/src/lib/jxl.jar ...
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 71

你需要使用=,而不是==[ $? == 0 ]行.

  • `==`适用于bash但是对于sh我们需要使用`=`来比较两个字符串是否相等. (6认同)
  • 为什么有什么区别? (2认同)

R S*_*hko 8

你应该改为:

if [ $? -eq 0 ]; then
    ...
Run Code Online (Sandbox Code Playgroud)

-eq 进行数字比较.

您还可以利用以下事实:在shell中,返回值0被视为成功,并按如下方式编写代码:

if jar tvf "$i" | grep "$LOOK_FOR"; then
    ...
Run Code Online (Sandbox Code Playgroud)

  • 正是我的问题.`==`仅在**bash**中有效,但我使用**sh**. (4认同)