diff --git a/SC2149.md b/SC2149.md new file mode 100644 index 0000000..f21e70f --- /dev/null +++ b/SC2149.md @@ -0,0 +1,41 @@ +## Remove $/${} for numeric index, or escape it for string. + +### Problematic code: + + # Regular array + index=42 + echo $((array[$index])) + +or + + # Associative array + index=banana + echo $((array[$index])) + +### Correct code: + + # Regular array + index=42 + echo $((array[index])) + +or + + # Associative array + index=banana + echo $((array[\$index])) + +### Rationale: + +For a numerically indexed array, the `$` is mostly pointless and can be removed like in [[SC2004]]. + +For associative arrays, the `$` should be escaped to avoid accidental dereferencing: + + declare -A array + index='$1' + array[$index]=42 + echo "$(( array[$index] ))" # bash: array: bad array subscript + echo "$(( array[\$index] ))" # 42 + +### Contraindications + +None. \ No newline at end of file