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
은 실제 배쉬가 아닌 것 같습니다.
의견에서 :
#!/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