인수로 제공된 파일보다 최신 디렉토리의 파일을 표시하는 스크립트를 만들려고 하는데 문제가 발생한 것 같습니다. 현재 나는 다음을 가지고 있습니다:
for f in *; do
if [["$f" -nt "$1"]]; then
echo "$f"
fi
done
그러나 이로 인해 반복되는 파일과 관련하여 명령을 찾을 수 없다는 오류가 계속 발생합니다. 이 스크립트의 문제를 어떻게 해결할 수 있나요?
답변1
주변에 공간이 필요합니다 [[
.]]
for f in *; do
if [[ "$f" -nt "$1" ]]; then
echo "$f"
fi
done
공백이 없으면 일련의 "명령을 찾을 수 없음" 오류가 발생합니다. 이는 쉘이 이름으로 명령을 찾았 [["$f"
으나 찾을 수 없기 때문입니다. 실행하려는 명령은 입니다 [[
.
대안
반복할 필요 없이:
find . -maxdepth 1 -newer "$1"
답변2
뒤에 공백이 필요 [[
하고 앞에 공백이 하나 더 필요합니다 ]]
. 이것은 [
전통적으로 실제 실행 파일( /bin/[
, 심볼릭 링크된 )인 의 이월입니다. 가 아닌 인수를 사용 /bin/test
하여 평가되도록 하려면 공간이 필요했습니다 .[
expression
[expression
bash 키워드 이지만 [[
비슷한 요구 사항이 있습니다.
[
또한 일반적 으로 가능한 한 스크립트에서 POSIX 호환을 사용하는 것이 좋습니다 . [[
표준이 아니므로 모든 POSIX 쉘에서 작동하지 않습니다.