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