为什么会产生_results=""
...
_results="$( grep ${_gopts[@]} )"
这会产生所需的 _results(fstab 中的 SSHFS 条目列表)...
_results="$( eval grep ${_gopts[@]} )"
_gopts 数组在这两种情况下都是相同的,并且包含...
declare -p _gopts
declare -a _gopts=([0]="--extended-regexp" [1]="--with-filename" [2]="--recursive" [3]="--include" [4]="fstab" [5]="'^[^#]*sshfs#'" [6]="/etc")
由于第 5 个元素(正则表达式:)周围有额外的引号
[5]="'^[^#]*sshfs#'"
。grep 命令将传递一个形式的参数,
'^regex'
而不是^regex
,这将永远不匹配(无法regex
同时跟随单引号并从行首开始)。删除它们,然后引用数组扩展(
"${_gopts[@]}"
而不是${_gopts[@]}
):您可能还想在数组声明中使用单引号而不是双引号:双引号不是必需的,因为没有元素包含变量和其他扩展。