if 문에서 조건부 확인

if 문에서 조건부 확인

이것은 내 bash 스크립트입니다.

while ./clipnotify;
do
  SelectedText="$(xsel)"
  CopiedText="$(xsel -b)"
  Check="$(xclip -selection clip -t TARGETS -o)"
  if ["$Check" != *"image"*]; then
    if [[ $SelectedText != *"file:///"* ]]; then
      ModifiedTextPrimary="$(echo "$SelectedText" | tr -s '\n' ' ')"
      echo -n "$ModifiedTextPrimary" | xsel -i
    fi
    if [[ $CopiedText != *"file:///"* ]]; then
      ModifiedTextClipboard="$(echo "$CopiedText" | tr -s '\n' ' '  )"
      echo -n "$ModifiedTextClipboard" | xsel -bi
    fi
  fi
done

xclip -selection clip -t TARGETS -o텍스트가 클립보드에 복사되면 출력됩니다.

TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
UTF8_STRING
COMPOUND_TEXT
TEXT
STRING
text/plain;charset=utf-8
text/plain;charset=ANSI_X3.4-1968
text/plain

xclip -selection clip -t TARGETS -o이미지가 클립보드에 복사될 때 출력:

application/x-qt-image
image/png
image/bmp
image/bw
image/cur
image/eps
image/epsf
image/epsi
image/icns
image/ico
image/jp2
image/jpeg
image/jpg
image/pbm
BITMAP
image/pcx
image/pgm
image/pic
image/ppm
PIXMAP
image/rgb
image/rgba
image/sgi
image/tga
image/tif
image/tiff
image/wbmp
image/webp
image/xbm
image/xpm
TARGETS
MULTIPLE
TIMESTAMP
SAVE_TARGETS

내가 원하는 것은 출력을 xclip -selection clip -t TARGETS -o변수 에 저장 Check하고 명령문을 사용하여 if변수에 "image"라는 단어가 포함되어 있는지 확인하여 클립보드에 이미지가 포함되어 있음을 감지하고 추가 실행을 비활성화하는 것입니다.

스크립트를 실행하는 동안 오류가 발생했습니다.

/home/user/Applications/Scripts/CopyWithoutLinebreaks/debug.sh: line 16: [application/x-qt-image
image/png
image/bmp
image/bw
image/cur
image/eps
image/epsf
image/epsi
image/icns
image/ico
image/jp2
image/jpeg
image/jpg
image/pbm
BITMAP
image/pcx
image/pgm
image/pic
image/ppm
PIXMAP
image/rgb
image/rgba
image/sgi
image/tga
image/tif
image/tiff
image/wbmp
image/webp
image/xbm
image/xpm
TARGETS
MULTIPLE
TIMESTAMP
SAVE_TARGETS: No such file or directory

이 스크립트는 이미지 상태 확인이 제거되면 작동합니다.

오류를 해결할 수 있는 방법이 있나요?

답변1

쉘 스크립트는 비교 작업을 위해 내장 함수를 사용할 때 누락된 공백에 매우 민감합니다.

if ["$Check" != *"image"*]; then
#  ^^                    ^^       lack of spaces

if [ "$Check" != *"image"* ]; then
#                                 right syntax

다음 문자의 시작 부분과 뒤에 공백이 있어야 하며 [, 그 앞에 공백이 있어야 합니다. ]공백이 없으면 구문 평가가 [..]실패하여 오류 메시지가 나타납니다.

관련 정보