bash 用带空格的参数分配变量
Posted
技术标签:
【中文标题】bash 用带空格的参数分配变量【英文标题】:bash assign variable with parameters with space in value 【发布时间】:2020-07-17 15:45:21 【问题描述】:我需要通过我的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 $4
-movflags frag_keyframe+empty_moov
$ ytdlExtraOptions="--external-downloader ffmpeg --external-downloader-args -movflags\\ frag_keyframe+empty_moov"
$ set -- $ytdlExtraOptions
$ echo $4
-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 $4
-movflags
如何正确分配我的ytdlExtraOptions
变量?
【问题讨论】:
你真的不能。使用 bash 数组。 @KamilCuk 我要用 bash 数组重写我的问题。 不清楚你在问什么。请澄清一下很酷。 @LéaGris 我重写了我的问题以澄清事情。如果它更容易理解,请撤消你的否决:) 您已经分配了它,但请在您的数组变量引用周围添加双引号:set -- "$ytdlExtraOptions[@]"
,它会正确设置您的参数。
【参考方案1】:
使用 bash 数组。
set -- --external-downloader ffmpeg --external-downloader-args "-movflags frag_keyframe+empty_moov"
toto=("$@")
set -- "$toto[@]"
echo $4
或者,您可以使用 evil eval
和 printf "%q "
正确引用和重新评估您的参数:
set -- --external-downloader ffmpeg --external-downloader-args "-movflags frag_keyframe+empty_moov"
toto=$(printf "%q " "$@")
eval set -- "$toto"
【讨论】:
以上是关于bash 用带空格的参数分配变量的主要内容,如果未能解决你的问题,请参考以下文章