bash 为参数赋值 space 的变量

bash assign variable with parameters with space in value

我需要通过我的 ytdlExtraOptions 变量将 --external-downloader ffmpeg --external-downloader-args -movflags frag_keyframe+empty_moov 作为 4 个参数传递给我的 bash 函数(在我的 .bash_functions 中定义):

$ set -- --external-downloader ffmpeg --external-downloader-args -movflags\ frag_keyframe+empty_moov
$ echo 
-movflags frag_keyframe+empty_moov
$ ytdlExtraOptions="--external-downloader ffmpeg --external-downloader-args -movflags\ frag_keyframe+empty_moov"
$ set -- $ytdlExtraOptions
$ echo 
-movflags\

使用 bash 数组:

$ ytdlExtraOptions=(--external-downloader ffmpeg --external-downloader-args -movflags\ frag_keyframe+empty_moov)
$ echo ${ytdlExtraOptions[3]}
-movflags frag_keyframe+empty_moov
$ set -- ${ytdlExtraOptions[@]}
$ echo 
-movflags

如何正确分配我的 ytdlExtraOptions 变量?

使用 bash 数组。

set -- --external-downloader ffmpeg --external-downloader-args "-movflags frag_keyframe+empty_moov"
toto=("$@")
set -- "${toto[@]}"
echo 

或者你可以使用 evil evalprintf "%q " 来正确引用和重新评估你的参数:

set -- --external-downloader ffmpeg --external-downloader-args "-movflags frag_keyframe+empty_moov"
toto=$(printf "%q " "$@")
eval set -- "$toto"