sh/bash/zsh의 경우 https://github.com/koalaman/shellcheck이 있지만 물고기가있는 물고기는 지원되지 않습니다 https://github.com/koalaman/shellcheck/issues/209 - 물고기에 대한 알림이 있습니까?쉘 체크가있는 배쉬 (bash)가있는 것처럼 물고기를위한 린터가 있습니까?
답변
내 지식으로는 (분명히 증명할 수 없음).
누군가가 그러한 것을 만들려면 "일반적인 초보자의 구문 문제"와 "셸이 이상하고 반 직관적으로 행동하게 만드는 의미 문제"에 대한 합의가 필요합니다.
물고기에는 POSIX sh의 사마귀가 많지 않습니다 (반응으로 쓰여졌 기 때문에). shellcheck README에서 몇 가지 예 :
echo $1 # Unquoted variables
물고기의 인용 동작은 매우 다릅니다 - 특히, 변수에 대한 어떤 단어 분할, 당신이 원하는 것을 일반적으로 할 그래서 인용 부호로 둘러싸이지 않은 변수가 없습니다.
v='--verbose="true"'; cmd $v # Literal quotes in variables
아마도 이것은 (필요하지 않은) 단어 분할을 무력화하려는 시도 일 것입니다.
이 예제는 sh 스크립트를 수십 년 동안 사용했음을 잘 보여줍니다. 결점과 직관력이없는 행동은 실제로 잘 알려져 있습니다. 사실은 잘 알려져 있지만 일반적이지만 잘못된 해결 방법도 잘 알려져 있습니다. 그것은 물고기의 경우가 아닙니다.
(물론, 다른 예는,뿐만 아니라 특히 "자주 오용 명령"섹션 물고기를 적용 않습니다.) 나는 새 사용자를 알고 물고기
어떤 일을 자주 걸려 넘어 :
인용 부호가없는 변수는 목록의 요소 당 하나의 인수로 확장됩니다 (모든 변수가 하나이므로). 목록이 비어 있으면 0이 포함되며 이는
test
과 관련된 문제입니다 (예 :test
).test -n $var
은 fish의 테스트 내장 함수가 POSIX와 호환되는 몇 안되는 부분 중 하나이기 때문에 0을 반환합니다 (POSIX는 하나의 인수로 테스트를 요구하므로 0을 반환합니다). 항상 하나의 인수가 필요한 경우 큰 따옴표를 붙이십시오.{}
는 아무것도 팽창{x}
일부 자식 커밋 ishes ([email protected]{4}
)을하는 것처럼, 인용find -exec
요구 수단 "X"로 확장된다.
Faho 이미 훌륭한 답을 제공하지만 난 물고기 이동 - 랭과'연타의 경우와 gofmt''와 같은 어떤 도구 물고기 코드를 수행 할 물고기 파서를 활용하는'fish_indent' 명령을 가지고 있음을 지적하고 싶었 -format'는 C/C++에서 사용됩니다. 이 도구는'fish_lint' 명령의 기초가 될 수 있습니다. 충분히 동기를 부여받은 사람은 슬리브를 감아 서 그러한 명령을 구현하는 코드를 작성하는 것이 좋습니다. –