val=`$LINE`처럼 정의하면 $LINE의 bash 값이 표시되지 않습니다.

val=`$LINE`처럼 정의하면 $LINE의 bash 값이 표시되지 않습니다.

어떤 이유로 $LINE 값이 val=에 나타나지 않는 다음 bash 스크립트가 있습니다. 각 $LINE은 파일에서 읽은 행을 표시할 수 있지만 val에 정의된 경우에는 표시되지 않습니다.

  #/bin/bash
  while read LINE
  do
       echo "Processing:" $LINE
       val=`ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D "cn=admin,dc=testing,dc=com" id=$LINE | grep val`
       echo $LINE "," $val
  done < inputfile.txt

내가 여기서 뭘 잘못하고 있는지 아시나요?

답변1

귀하의 질문에 따르면 귀하의 ldapsearch.

잠재적인 수정 #1

우선 명령의 백틱 부분이 어떻게 확장되는지 확인할 수 있도록 자세한 출력을 활성화하겠습니다.

set -x
val=`ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
     "cn=admin,dc=testing,dc=com" id=$LINE | grep val`
set +x
잠재적인 수정 #2

$()또한 백틱 대신 기호를 사용하도록 변경하겠습니다 .

val=$(ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
     "cn=admin,dc=testing,dc=com" id=$LINE | grep val)
잠재적인 수정 #3

$LINE또한 에 전달될 때 내용을 인용하겠습니다 id=.

val=$(ldapsearch -h localhost -w test -z 0 -x -b 'dc=test,dc=org' -D \
     "cn=admin,dc=testing,dc=com" id="$LINE" | grep val)
잠재적인 수정 #4

마지막으로 에서 STDOUT 및 STDERR을 구문 분석할 수 있도록 파이프를 에서 |으로 변경해 보았습니다 .|&ldapsearch

일반적인 팁

shebang 줄에 스위치를 추가하면 언제든지 -xBash의 전체 상세 출력을 활성화 할 수 있습니다.

#!/bin/bash -x
...script...

답변2

이는 인용 문제일 수 있습니다. 대신 id=$LINE(보통 ) id="$LINE".echo $LINE

관련 정보