なぜ変数を一重引用符で囲むことができないのですか? [コピー]

なぜ変数を一重引用符で囲むことができないのですか? [コピー]

したがって、このコードは正しく機能します。 「$i」は二重引用符で囲まれています。

for ((i=0; i <= 10; i++)); do
    printf '%d\n' "$i"
    done

ただし、「$i」を一重引用符(「$i」)で囲むと、10回だけ繰り返されます。

bash: printf: $i: invalid number
0

なぜ?この質問にはバグレポートが含まれており、誰もが言うように哲学的ではありません。これが「悪い問題」であると判断する前に、インターネットのすべての内容を読むことはできません。

ベストアンサー1

文字列を一重引用符で囲むと、シェルは文字列で変数拡張を実行しません。リテラル文字列を取得します。 printfコマンドの場合、値は$i有効な10進数ではないため、printfでエラーが発生します。

文字列を二重引用符で囲むと、シェルは変数拡張を実行します。この場合、変数の整数値を返し、iprintfはこれに満足します。

おすすめ記事