Bourne 쉘 내부의 작은따옴표 및 변수

Bourne 쉘 내부의 작은따옴표 및 변수

Solaris 9용 Bourne 쉘에서 실행하려는 명령이 있습니다.

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

내 문제는 변수가 ${PARSEDATA}제대로 작동하지 않는다는 것입니다. 주위에 큰따옴표를 사용해 보았지만 문제는 $0명령을 사용하여 찾은 파일이 아니라 이 코드를 실행하는 스크립트의 이름입니다 find.

아마도 쉬운 문제일 수 있는 이 문제를 해결하기 위한 제안은 큰 도움이 됩니다.

미리 감사드립니다.

업데이트: $0는 명령 을 사용하여 찾은 스크립트의 이름이고 find, 변수는 찾은 ${PARSEDATA}각 스크립트의 출력을 수정하는 시스템 어딘가에 있는 필터입니다. 그러나 문제는 둘 다 얻을 수 없고 제대로 확장할 수 없는 것 같습니다 $0. ${PARSEDATA}작은 $0따옴표를 사용하여 잘 확장하거나 큰 인용 부호를 사용하면 ${PARSEDATA}잘 확장되지만 $0이 -명령을 실행하는 원래 스크립트의 이름이 됩니다 find.

답변1

당신이 무엇을 하려는지 잘 모르겠습니다. 하지만 check_*라는 이름의 스크립트를 찾은 다음 이를 실행하고 ${PARSE_DATA} 프로그램을 통해 파이프하려면 find로 찾은 파일은 $0아니지만{}

/var/ftp/mp3 찾기 -name "*.mp3" -type f -exec chmod 644 {} \; (위키피디아)

그래서 큰따옴표를 사용할 수 있다고 생각합니다.

find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}

나는 성공적으로 시도했습니다 :

PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;

> Bleh Blah

답변2

작은따옴표를 유지하세요. 문제는 PARSEDATA 변수를 내보내지 않았을 가능성이 높습니다.

export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}

답변3

$0이 쉘에 의해 확장되지 않고(작은 따옴표 사용) ${PARSEDATA}가 확장되는 것을 원하지 않는다면 각각에 대해 서로 다른 따옴표를 사용하는 것이 어떨까요?

find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}

인용된 부분을 결합된 상태로 유지하는 한 쉘은 ${PARSEDATA}를 확장하고 전체 명령을 단일 토큰으로 전달하여 찾습니다.

관련 정보