zsh에서 매개 변수 확장 중에 문제가 있습니다. 변수를 따옴표로 묶습니다.zsh : 매개 변수 확장 따옴표 삽입
내 스크립트는 다음과 같습니다. (사과는 소음, 유일한 진짜 중요한 라인은 find
호출로 마지막이지만, 나는 확실히 내 코드의 자세한 내용은 숨어 있지 않다 만들고 싶어)을에, 그냥 명확하게하기 위해
#broken_links [-r|--recursive] [<path>]
# find links whose targets don't exist and print them. If <path> is given, look
# at that path for the links. Otherwise, the current directory is used is used.
# If --recursive is specified, look recursively through path.
broken_links() {
recurse=
search_path=$(pwd)
while test $# != 0
do
case "$1" in
-r|--recursive)
recurse=t
;;
*)
if test -d "$1"
then
search_path="$1"
else
echo "$1 not a valid path or option"
return 1
fi
;;
esac
shift
done
find $search_path ${recurse:--maxdepth 1} -type l ! -exec test -e {} \; -print
}
을 find
라인을 사용하고 싶습니다. recurse
이 null 인 경우 -maxdepth 1
을 대입하면됩니다. recurse
이 t
으로 설정된 경우 아무 것도 대체하지 않습니다 (즉, 일반적인 재귀 동작을 찾으십시오).
실제로는 ${name:-word}
양식이지만 word
은 실제로 하이픈으로 시작하기 때문에보기에는 별 의미가 없습니다. (주변 시세를 참고) recurse
가 null의 경우, 그것은 "-maxdepth 1"
대체,
대신, 어떤 일어나는 것은 (여기 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion이에 대한 자세한 내용을 참조하십시오) 및 recurse
가 설정되어있는 경우, 그것은 ""
를 대체합니다.
재귀가 발생하지 않을 때의 정확한 오류는 find: unknown predicate `-maxdepth 1'
입니다. 예를 들어 find "-maxdepth 1"
이라고 말하면됩니다. 우리가 재귀를 원할 때, 나는 이상하게도 설명 할 수 없지만 오류는 find `t': No such file or directory
입니다.
누구든지이 매개 변수 확장에 따옴표를 넣지 않는 방법을 알고 있습니까? 나는 그것이 내 문제라고 여기에서 믿는다.
감사합니다.
그랬습니다! 감사! –