category: CLI
layout: 2017/sheet
tags: [Featured]
-updated: 2020-07-04
+updated: 2020-07-05
keywords:
- Variables
- Functions
---------------
{: .-three-column}
+### Introduction
+{: .-intro}
+
+This is a quick reference to getting started with Bash scripting.
+
+- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
+- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
+
### Example
```bash
```bash
STR="Hello world"
echo ${STR:6:5} # "world"
-echo ${STR:-5:5} # "world"
+echo ${STR: -5:5} # "world"
```
```bash
### Arguments
-| Expression | Description |
-| --- | --- |
-| `$#` | Number of arguments |
-| `$*` | All arguments |
-| `$@` | All arguments, starting from first |
-| `$1` | First argument |
-| `$_` | Last argument of the previous command |
+| Expression | Description |
+| --- | --- |
+| `$#` | Number of arguments |
+| `$*` | All postional arguments (as a single word) |
+| `$@` | All postitional arguments (as separate strings) |
+| `$1` | First argument |
+| `$_` | Last argument of the previous command |
+
+**Note**: `$@` and `$*` must be quoted in order to perform as described.
+Otherwise, they do exactly the same thing (arguments as separate strings).
See [Special parameters](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).
```
```bash
-$((RANDOM%=200)) # Random number 0..200
+$(($RANDOM%200)) # Random number 0..199
```
### Subshells