#!/bin/bash
file=/home/yaal/temp/hatch/*;
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
해치 디렉토리에 파일이 있지만 "파일을 찾을 수 없습니다"가 표시됩니다. 왜 그럴까요?스크립트에 해당 디렉토리에있는 파일 이름이 표시되지 않습니다
감사합니다.
#!/bin/bash
file=/home/yaal/temp/hatch/*;
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
해치 디렉토리에 파일이 있지만 "파일을 찾을 수 없습니다"가 표시됩니다. 왜 그럴까요?스크립트에 해당 디렉토리에있는 파일 이름이 표시되지 않습니다
감사합니다.
경로명 확장이 [[ ... ]]
안에 일어나지 않기 때문에 for loop
을 사용하여 파일이 존재하는지 확인하는 것이 가장 좋습니다. 그래서 file
는 문자 *
이 아닌 파일 이름의 목록이 포함
#!/bin/bash
for file in /home/yaal/temp/hatch/*; do
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
done
경로 이름의 확장이 아닌 배열 변수 할당의 오른쪽에 발생하지 않습니다 같은 것을 사용합니다. 경로 이름 확장은 [[ ... ]]
내에서 수행되지 않으므로 *
이라는 파일이/home/yaal/temp/hatch`에 있는지 묻는 중입니다. 당신은 단지 하나 개 이상의 파일이있는 경우 hatch
에 (.
로 시작하는 파일 제외) 알고 싶다면이 비어 있거나없는 경우
,
for f in /home/yaal/temp/hatch/*; do
if [[ -f $f ]]; then
echo "$file"
else
echo "No files found"
fi
break
done
당신은 또한 다음, 배열을 채울 확인할 수 있습니다 시도 :
files=(/home/yaal/temp/hatch/*)
if ((${#files[@]} > 0)); then
echo "${files[0]}" # First file found
else
echo "No files found"
fi
당신이 .
로 시작하는 파일 이름을 고려 중 하나 shopt -s dotglob
를 사용하거나 두 가지 패턴 /home/yaal/temp/hatch/* /home/yaal/temp/hatch/.*
를 사용하려는 경우
실제로 어떻게되는지 설명하는 +1. –
'bash'는 정규식을 사용할 수 있지만 다른 상황에서 사용할 수 있습니다. – chepner
감사합니다. @chepner. 혼동을 피하기 위해 답을 수정했습니다. –