파일을 찾고 파일이 발견되면 전체 경로를 변수에 저장하는 스크립트를 작성하려고 합니다. 현재 버전:
if [[ -n FOUND_PATH=$(find "$PATH" -name "file.exe") ]]; then
echo "Found, full path: "$FOUND_PATH
else
echo "Not found."
fi
[[ -n ]]
파일이 실제로 발견되지 않고 FOUND_PATH
실제로 비어 있더라도 표현식은 true로 평가됩니다. 내가 뭘 잘못했나요?
편집하다:
현재 겪고 있는 문제를 설명하기 위해 이 코드는 다음과 같습니다.
find "$PATH" -name "file.exe"
FOUND_PATH=$(find "$PATH" -name "file.exe")
if [[ -n "$(FOUND_PATH)" ]]; then
echo "Found, full path: "$FOUND_PATH
else
echo "Not found."
fi
just 를 반환 Found, full path:
하므로 첫 번째 줄은 전혀 아무것도 출력하지 않지만 나중에 세 번째 줄에서 비어 있지 않은 문자열인지 확인하면 비어 있지 않은 것으로 평가됩니다!
답변1
Bash에서의 할당은 C와 같은 일부 결과를 제공하지 않습니다. 당신은 이것을 해야 합니다:
FOUND_PATH=$(find "$PATH" -name "file.exe")
if [[ -n "$FOUND_PATH" ]]; then
echo "Found, full path: $FOUND_PATH"
else
echo "Not found."
fi
그리고 $FOUND_PATH가 첫 번째 매개변수의 큰따옴표 사이에 있는지 확인하세요 echo
.
$PATH가 단일 디렉터리가 아니지만 예를 들어 /usr/bin:/bin
첫 번째 줄을 다음과 같이 변경할 수 있는 경우:
FOUND_PATH=$(find $(echo "$PATH" | sed "s/:/ /g" ) -name "file.exe")