当像 val=`$LINE` 这样定义时,$LINE 的 bash 值不会显示

当像 val=`$LINE` 这样定义时,$LINE 的 bash 值不会显示

由于某种原因,我有以下 bash 脚本 $LINE 值没有出现在 val= 上。我可以看到每个 $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

一般提示

您始终可以通过将开关附加-x到 shebang 行来启用 Bash 的完整详细输出。

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

答案2

这可能是一个引用问题。相反,id=$LINE您应该(通常)使用id="$LINE".对于 也一样echo $LINE

相关内容