2012-03-31 3 views
0

나는 find을 사용하여 폴더를 검색하고 경로를 저장하는 bash 스크립트에 한 줄을 가지고 있습니다."찾기"bash에서 복수 공백 제거

findfolder=$(eval echo $(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1")) 

을하고 내가 거기에 두 개의 공백이있는 폴더를 검색 할 경우는 어떤 이유에서 작동 거의 모든 경우, 그러나 경로 어디를 반환합니다, 다음과 같이

라인이다 모든 두 개의 공백이 단일 공백으로 전환되었습니다.

그래서, 폴더를 찾고 있어요 경우는 "내"와 "음악"사이에 두 개의 공백으로 "내 음악"라고, 그것은 하나 개의 공간을 "내 음악"을 반환합니다.

터미널에서 똑같은 명령을 직접 실행하면 올바른 폴더를 얻을 수 있습니다.

왜 이런 일이 발생합니까? (더 많은 코드가 필요하면 알려주세요. 터미널에서 똑같은 명령을 실행 한 이후로 관련성이 없어 보입니다. 명백한 이유로 wall-of-text를 원하지 마십시오.)

편집 : 그것은 지금 노력하고 있습니다

. 첫 번째 평가 또는 반향 (확신 할 수는 없지만 테스트 결과에 따르면 eval)은 출력이 붕괴되어 "불필요한"간격을 제거하고있었습니다. 작업 코드는 다음과 같습니다 당신이 평가 후면 문으로 뭘 하려는지 이해가 안

findfolder="$(eval "find "$HOME" -iname "$find_regex" -type d -print 2>/dev/null | sort -d | head -1")" 
+1

흥미 롭습니다. 하지만 이중 $ ($)와 evals가 필요합니까? –

+0

@ PéterVarga 그럼 eval을 사용하기 전에 제대로 작동하지 않았습니다. 그들은 echo를 사용하여 결과에 변수를 할당하는 문제를 해결했습니다. – keyser

+1

@ PéterVarga 이제 해결되었습니다. 첫 번째 평가와 반향은 필요하지 않으며 붕괴의 원인이되었습니다. 이상한 점을 발견했다. – keyser

답변

3

. 그러나 명령 대체를 인용하여 실험 할 수 있습니다. 다음 두 명령 행의 차이점에 유의하십시오.

# the two spaces between foo and bar are collapsed 
echo $(echo "foo bar") 

# the two spaces between foo bar bar are kept 
echo "$(echo "foo bar")"