このサイトのコメントで算術拡張が覚えているようです。可能スプレーされていますが、コメントが見つかりませんでした。
次のコードを考えてみましょう。
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
):
算術拡張
式のすべてのトークンは、パラメータ拡張、文字列拡張、コマンド置換、および引用符の削除を受けます。
したがって、分割は行われません。