如何从子 shell 读取多个变量

如何从子 shell 读取多个变量

我在 stackexchange 上发现了类似的问题,但距离我的案例还不够近,无法提供帮助。

我正在尝试创建一个脚本并将其绑定到一个键,这样当按下时,它会显示“ titleby artist”,或者,如果没有艺术家/标题,它会显示“ filename”。

Cmus(我选择的音乐播放器)cmus-remote-C(原始)选项配对,让我可以查询 cmus 播放器的任何内容并获得换行符分隔的响应,例如:

cmus-remote -C 'format_print %a %t %F'
Beach House
Space Song
/home/user/Music/Beach House - Space Song.mp3

问题是,我不想运行cmus-remote每个查询,而是更喜欢

IFS= read -r artist title file << EOF
$(cmus-remote -C 'format_print %a %t %F')
EOF

但是,仅提供artist和 ,title并且file为空注意:删除该-r选项在这种情况下没有帮助,修改IFS.

详细说明:我的音乐文件夹没有完全标记,即有些歌曲没有艺术家或标题,所以这个脚本的想法是在 exec 上发送通知“正在播放titleartist,如果没有标题或艺术家“正在播放” filename' 所以我需要三个变量来评估要发送的通知。

答案1

我只需要阅读每个换行符,即

cmus-remote -C 'format_print %a %t %F' | 
while IFS= read -r artist; IFS= read -r title; IFS= read -r file
do
  echo "a:$artist"
  echo "t:$title"
  echo "f:$file"
done

运行一次并回显正确的值,为什么IFS=$'\n'不像你认为的那样表现超出我的范围,我会接受三读

相关内容