내 상황은 다음과 같습니다.
SEARCH="find `pwd` -name"
bash> $SEARCH resources.xml | grep $SEARCH_DIR | grep $1 | grep ‘cells’
pwd
하지만 해당 변수에서 참조되는 내용을 알 수 없습니다 .
답변1
alias SEARCH='find . -name'
또는
SEARCH() { find . -name "$1"; }
용법
SEARCH resources.xml | ...
이는 SEARCH
변수가 아닙니다. 명령을 변수( SEARCH='find . -name'
)로 정의할 수 있지만 별칭이나 함수 정의가 더 일반적입니다.
답변2
현재 디렉토리는 라인이 평가될 /original/directory
때 와 라인이 평가될 때로 가정됩니다.SEARCH=…
/later/directory
$SEARCH …
변수가 정의될 때 명령 대체가 `pwd`
평가되므로 로 설정됩니다. 해당 시점의 현재 디렉터리에 공백이나 와일드카드가 포함되어 있지 않으면 나중에 해당 디렉터리에서 호출됩니다.SEARCH
SEARCH
find /original/directory -name
$SEARCH resources.xml
find
find /original/directory -name resources.xml
원래 현재 디렉터리에 공백이나 와일드카드가 포함되어 있으면 이 작업이 작동하지 않습니다. 이와 같은 변수에 명령을 채우는 것은 매우 간단한 경우를 제외하고는 작동하지 않습니다. 바라보다공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?
find
에서 실행 하려면 /later/directory
를 실행하세요 find .
. 그러나 여기서 변수는 올바른 도구가 아닙니다. 변수는 문자열을 저장하는 데 사용됩니다. 매개변수가 있는 명령은 문자열이 아니지만목록끈. 셸 코드 조각은 문자열로 저장될 수 $SEARCH
있지만아니요SEARCH
셸 조각으로 값을 실행합니다(다시 참조).공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?). 나중에 사용할 수 있도록 셸 코드 조각을 저장하려면 함수를 정의하세요.
SEARCH () {
find "$PWD" -name "$@"
}
…
SEARCH resources.xml | …
다시 말하지만, find
에서 실행 /later/directory
하려면 가장 좋은 방법은 디렉터리를 변수에 저장하고 나중에 해당 변수를 사용하는 것입니다.find
/original/directory
original_directory="$PWD"
SEARCH () {
find "$original_directory" -name "$@"
}
…
SEARCH resources.xml | …