새로운 것을 어떻게 재정의하거나 정의합니까?조건식 기본 색상배쉬에서? 예를 들어, 빈 디렉터리가 존재하는지 테스트하기 위해 마스터 데이터베이스를 원합니다. 물론 하나의 기본 옵션만 사용하여 이를 수행하는 것이 가장 좋지만 이것이 불가능할 경우 두 가지 기본 옵션을 사용할 수 있습니다. 예를 들어, 저는 다음과 같은 목표를 달성하고 싶습니다.
if [ -DZ $HOME/dir ]; # true if directory the path is an empty directory
then echo "$HOME/dir doesn't have any non-hidden files or directories!"
fi
답변1
자신만의 조건자를 추가하려면 내장 명령의 소스를 test
수정해야 합니다 . 이식할 수 없는 스크립트가 생성되므로 이는 아마도 여러분이 원하는 작업이 아닐 것입니다. 대신 쉘 함수를 사용할 수 있습니다.bash
[
isemptydir () (
shopt -s nullglob
shopt -s dotglob
if [ -z "$1" ]; then
echo 'isemptydir: Empty or missing argument' >&2
return 1
# could instead do: set .
# this would use the current directory as the "default" one
fi
if [ -d "$1" ]; then
# note: above test fails on inaccessible dirs --> "not empty"
set -- "${1%/}"/*
[ "$#" -eq 0 ]
# note: above test succeeds on unlistable dirs --> "empty"
fi
)
if isemptydir "$mydir"; then
printf 'Directory "%s" is empty\n' "$mydir"
else
printf '"%s" is not a directory, or is not empty\n' "$mydir"
fi
이 함수는 주어진 인수가 디렉터리 이름인지 테스트합니다. 그렇다면 숨겨진 이름을 포함하여 디렉터리에서 사용 가능한 이름(파일뿐만 아니라)의 수를 계산하고 이를 0과 비교합니다. 마지막으로 실행된 테스트의 반환 상태는 함수의 반환 상태입니다.
[
자신만의 함수 오버로드나 명령 을 사용할 수 있지만 test
이로 인해 문제가 발생할 수도 있습니다.