サブシェルから複数の変数を読み取る方法

サブシェルから複数の変数を読み取る方法

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削除しても役に立ちません。を修正してください。-rIFS

詳細な説明:My Musicフォルダにタグが完全に割り当てられていません。つまり、一部の曲にはアーティストやタイトルがないため、このスクリプトのアイデアは、タイトルやアーティストがない場合は、「今すぐプレイtitle」の実行に通知を送信することです。したがってartistfilename送信する通知を評価するには3つの変数が必要です。

ベストアンサー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'、思ったように動作しない理由は私の能力の外です。 3回目の読書を許可します。

おすすめ記事