「$$ブレース展開」の挙動(おしえてもらったので解決)

Mon Jan 22 09:46:25 JST 2024 (modified: Mon Jan 22 09:49:33 JST 2024)
views: 956, keywords:bash

 先日のこの謎ですが、解決しました。Stack Overflowに質問したらmanに書いてあるぞ、とのことでした。


   $ echo $${x,y}
   4821{x,y}      #ブレースの部分が展開されない <-謎

結局なにか

 manを読むと、パラメータ展開との衝突を避けるため、文字列 ${ はブレース展開の対象とは解釈されません。とちゃんと書いてありました。 @emasaka | シェルの展開順序に気をつけようという有り難い記事にもあるように、「ブレース展開」→「変数の展開」という順に処理が進むので、ブレース展開の段階では、まだ${$がなんなのか確定してないので、そういうルールが導入されているみたいです。

おまけ

 これだと教えてもらっただけでなんも貢献がないので、「ブレース展開」→「変数の展開」の順番が分かるワンライナーを提示しておきます。


   $ echo $BASH{_VERSION,}
   5.1.16(1)-release /usr/bin/bash
   $ echo {$,}{SHELL,}
   /bin/bash $ SHELL
   $ echo {$PP,a}{ID,c}
   2999 aID ac
   $ echo {$,a}{{PPID},c}
   2999 a{PPID} ac

以上です。Stack Overflow、久しぶりに使いましたが数時間でどしどし回答が集まって、英語圏でけえという感じでした。

ノート   このエントリーをはてなブックマークに追加 
 

prev:「$$ブレース展開」の挙動 next:本を売りたいので宣伝

やり散らかし一覧

記事いろいろ