算術置換の命令置換が単語分割につながりますか?

算術置換の命令置換が単語分割につながりますか?

このサイトのコメントで算術拡張が覚えているようです。可能スプレーされていますが、コメントが見つかりませんでした。

次のコードを考えてみましょう。

printf '%d\n' "$(($(sed -n '/my regex/{=;q;}' myfile)-1))"

sedコマンドが複数の桁を出力して数字を含む場合、$IFSコマンド置換は算術が発生する前に単語分割を実行しますか?

(追加の二重引用符を使用してテストしました。

printf '%d\n' "$(("$(sed -n '/my regex/{=;q;}' myfile)"-1))"

しかし、これはうまくいきません。 )


ところで、上記のサンプルコードは変更を適用することで最も単純な形式に縮小されました。この機能ただStack Overflowに投稿しました。

答え1

いいえ、そうではありません。

存在する$((expression))表現する次のように二重引用符で囲まれたものとして扱われます。POSIXの指定

ただし、コマンド置換内の式は依然として次の影響を受けますsplit+glob

$ printf '%d\n' "$(( $(IFS=0; a=10; echo $a) + 1 ))"
2

二重引用符を使用する:

$ printf '%d\n' "$(( $(IFS=0; a=10; echo "$a") + 1 ))"
11

他の拡張と同様に、算術拡張も二重引用符で囲まないと進みますsplit+glob

$ IFS=0
$ echo $((10))
1

答え2

bashマニュアルで(実行中LESS=+/'^ *Arithmetic Expansion' man bash):

算術拡張

式のすべてのトークンは、パラメータ拡張、文字列拡張、コマンド置換、および引用符の削除を受けます。

したがって、分割は行われません。

関連情報