source

bash의 문자열 비교입니다.[[: 찾을 수 없음]

nicesource 2023. 5. 24. 22:11
반응형

bash의 문자열 비교입니다.[[: 찾을 수 없음]

bash의 문자열을 비교하려고 합니다.는 이미 스택 오버플로 시 어떻게 해야 하는지에 대한 답을 찾았습니다.제가 시도하고 있는 스크립트에서, 저는 언급된 질문에 아담이 제출한 코드를 사용하고 있습니다.

#!/bin/bash
string='My string';

if [[ "$string" == *My* ]]
then
  echo "It's there!";
fi

needle='y s'
if [[ "$string" == *"$needle"* ]]; then
  echo "haystack '$string' contains needle '$needle'"
fi

두 번째 게시물에서 찾을 수 있는 unbu 포럼의 접근법도 시도했습니다.

if [[ $var =~ regexp ]]; then
  #do something
fi

두 경우 모두 오류가 표시됩니다.

[[: not found

내가 뭘 잘못하고 있는 거지?

[[배시 내장형입니다.당신의./bin/bash실제 공격은 아닌 것 같습니다.

댓글에서:

더하다#!/bin/bash파일 맨 위에

스크립트를 어떻게 실행하고 있습니까?만약 당신이 그것을 했다면.

$ sh myscript

시도해야 합니다.

$ bash myscript

또는 스크립트가 실행 가능한 경우:

$ ./myscript

sh와 bash는 두 개의 다른 껍질입니다.첫 번째 경우에는 스크립트를 인수로 sh 인터프리터에 전달하는 반면, 두 번째 경우에는 사용할 인터프리터의 첫 번째 줄을 결정합니다.

스크립트의 첫 번째 줄은 다음과 같습니다.

#!/bin/bash

또는

#!/bin/sh

sh 셸은 bash가 아닌 이 오류 메시지를 생성합니다.

@Ansgar가 언급했듯이,[[바시즘입니다. 즉, 바시에 내장되어 있으며 다른 셸에는 사용할 수 없습니다.스크립트를 휴대용으로 사용하려면[비교에는 다른 구문도 필요합니다. 변경==로.=.

if [ $MYVAR = "myvalue" ]; then
    echo "true"
else
    echo "false"
fi

Heroku Toolbelt를 설치할 때 문제가 발생했습니다.

이것이 제가 그 문제를 해결한 방법입니다.

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 ago 15  2012 /bin/sh -> dash

보시다시피 /bin/sh는 "대시"(배시가 아님)에 대한 링크입니다.[[바쉬 통사적인 달콤함입니다.그래서 저는 /bin/bash에 대한 링크를 교체했습니다.당신의 시스템에서 이렇게 rm을 사용하는 것을 조심하세요!

$ sudo rm /bin/sh
$ sudo ln -s /bin/bash /bin/sh

bash 중이라는 것을 알고도 여전히 이 오류가 발생하면 if를 공백으로 작성해야 합니다.

[[1==1]] # This outputs error

[[ 1==1 ]] # OK

스크립트를 실행할 때 sh 대신 bash를 지정합니다.개인적으로 Ubuntu 12.10에서는 차이가 있다는 것을 알게 되었습니다.

bash script.sh arg0 ... argn

터미널에서 실행:

sudo update-alternatives --install /bin/sh sh /bin/bash 100

파일을 실행 파일로 만든 다음 sh 없이 실행합니다.

  1. $ chmod +x 파일 이름으로 실행 가능하게 합니다.
  2. 그런 다음 sh 파일 이름 대신 ./filename을 사용합니다.

언급URL : https://stackoverflow.com/questions/12230690/string-comparison-in-bash-not-found

반응형