bash의 문자열 비교. [[: 찾을 수 없음
bash에서 문자열을 비교하려고합니다. 이미 stackoverflow 에서 수행하는 방법에 대한 답변을 찾았습니다 . 내가 시도하는 스크립트에서 언급 한 질문에 Adam이 제출 한 코드를 사용하고 있습니다.
#!/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
나는 또한 두 번째 게시물에서 찾을 수있는 우분투 포럼의 접근법을 시도 했습니다.
if [[ $var =~ regexp ]]; then
#do something
fi
두 경우 모두 오류가 발생합니다.
[[: not found
내가 뭘 잘못하고 있죠?
[[
bash 내장입니다. 당신 /bin/bash
은 실제 배쉬가 아닌 것 같습니다.
스크립트를 어떻게 실행하고 있습니까? 당신이 함께했다면
$ sh myscript
당신은 시도해야합니다 :
$ bash myscript
또는 스크립트가 실행 가능한 경우 :
$ ./myscript
sh 와 bash 는 서로 다른 쉘 입니다. 첫 번째 경우 스크립트를 sh 인터프리터에 인수로 전달하는 동안 두 번째 경우 첫 번째 행에서 사용할 인터프리터를 결정합니다.
스크립트의 첫 번째 줄입니다.
#!/bin/bash
또는
#!/bin/sh
sh 쉘은 bash가 아닌이 오류 메시지를 생성합니다.
Heroku Toolbelt를 설치할 때이 문제가 발생했습니다
이것이 내가 문제를 해결 한 방법입니다
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 ago 15 2012 /bin/sh -> dash
보시다시피, / bin / sh는 "대시"(bash가 아닌)에 대한 링크 [[
이며 bash 구문 설탕입니다. 그래서 방금 / bin / bash에 대한 링크를 교체했습니다. 시스템에서 rm과 같이 조심해서 사용하십시오!
$ sudo rm /bin/sh
$ sudo ln -s /bin/bash /bin/sh
@Ansgar가 언급했듯이 bashism [[
은 Bash에 내장되어 있으며 다른 쉘에서는 사용할 수 없습니다. 스크립트를 이식 가능하게하려면을 사용하십시오 [
. 비교에는 다른 구문이 필요합니다 :로 변경 ==
하십시오 =
.
스크립트를 실행할 때 sh 대신 bash를 지정하십시오. 나는 개인적으로 우분투 12.10에서 다르다는 것을 알았습니다.
bash script.sh arg0 ... argn
참고 URL : https://stackoverflow.com/questions/12230690/string-comparison-in-bash-not-found
'Programing' 카테고리의 다른 글
C #을 사용한 압축 / 압축 해제 문자열 (0) | 2020.06.28 |
---|---|
Xcode 4에서 탭 사이를 빠르게 전환하는 방법은 무엇입니까 (0) | 2020.06.28 |
웅변 ORM을 사용하여 라 라벨에 대량 삽입 (0) | 2020.06.28 |
범위 데이터 주석 속성을 사용하여 최소이지만 최대 소수는 지정하지 않는 방법은 무엇입니까? (0) | 2020.06.28 |
Visual Studio 2013 IntelliSense가 ASP.NET MVC5 컨트롤러에서 작동을 멈춤 (0) | 2020.06.28 |