이것이 가능합니까 (bash v5.0.3)?
추가 코드 재사용 및 스크립트 자동화를 위해 연관 배열의 키를 사용하여 선택 목록을 동적으로 채우고 싶습니다. 일부 키에는 공백만 필요합니다. 나는 내 문제를 다음과 같이 분리한 것 같다.choices="${!playlist_url[@]}" # Need quoted key expansion here, but choices="${!playlist_url[@]@Q} does nothing"
내 스크립트는 다음과 같습니다. "1)" 다음에 모든 업로더가 연결되어 인쇄된 선택 옵션이 표시됩니다. 내가 달성할 수 있는 최선의 방법은 키를 $choices의 작은 따옴표로 묶고 따옴표 밖으로 나가는 것입니다.choices=("Quit ${choices@Q}")
스크립트
# Creates the array
declare -A playlist_url
# Sets the field separator to comma and reads in the uploader & url
## EXAMPLES: from ~/.config/youtube-dl/playlists-hcs7 ##
# UploaderName,https://www.youtube.com/playlist?list=xx...xx
# Uploader Name,https://www/youtube.com/playlist?list=xx...xx
# Up Loader Name,https://www/youtube.com/playlist?list=xx...xx
while IFS=\, read -p "uploader,url" uploader url
do
playlist_url[$uploader]="$url"
done <~/.config/youtube-dl/playlists-hcs7
#unset IFS <--Ignore my trying to better understand the IFS
#IFS= <--" "
choices=${!playlist_url[@]} # Need quoted key expansion here (I think!)
choices=("Quit ${choices}") # Prepending 'Quit' for case break below
clear
PS3="Make a selection: "
select option in "$choices";
do
case $option in
"Quit")
echo "Exiting."
break
;;
*)
echo "Debug: $option"
# Do stuff
;;
esac
done
사용된 자원
즉, 연결된 답변의 편집 내용은 다음과 같습니다.
편집: 이 질문에 답변한 지 거의 5년 후, bash 4.4가 출시되었습니다. 여기에는 bash에서 다시 구문 분석할 수 있도록 변수를 참조하는 "${var@Q}" 확장자가 있습니다.