왜 이런 일이 일어나는가 _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
다섯 번째 요소(regex: ) 주위에 추가 따옴표가 있기 때문입니다 [5]="'^[^#]*sshfs#'"
.
'^regex'
grep 명령은 대신에 일치하지 않는 형식의 인수를 전달합니다 ( 둘 다 뒤에 작은따옴표가 올 ^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[@]}" )
배열 선언에 큰따옴표 대신 작은따옴표를 사용할 수도 있습니다. 요소에는 변수 및 기타 확장이 포함되어 있지 않으므로 큰따옴표가 필요하지 않습니다.