Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
linux:shell [2024/04/19 09:37] cyril |
linux:shell [2024/12/11 09:40] (current) cyril [Misc] |
||
|---|---|---|---|
| Line 10: | Line 10: | ||
| </ | </ | ||
| - | ==== Iterate over a list as a string ==== | + | ===== Iterate over a list as a string |
| - | If you have to define it as a string, '' | + | Different options: |
| <code bash> | <code bash> | ||
| - | setopts shwordsplit | + | # option 1, without variable |
| + | for x in a b c; do echo $x; done | ||
| + | |||
| + | # option 2, with string | ||
| list=" | list=" | ||
| - | for x in $list; do echo $x; done | + | for x in $list; do echo $x; done # only works with sh and bash |
| - | </ | + | for x in ${=list}; do echo $x; done # only works with zsh |
| + | for x in $(echo $list}; do echo $x; done # works with any shell | ||
| - | However if you can, it is better to define arrays: | + | # option 3, with an array |
| - | <code bash> | + | |
| list=(a b c) | list=(a b c) | ||
| for x in $list; do echo $x; done | for x in $list; do echo $x; done | ||
| Line 60: | Line 63: | ||
| search_dir " | search_dir " | ||
| </ | </ | ||
| + | |||
| + | ===== Misc ===== | ||
| + | |||
| + | * **Default value for variable**: <code bash> | ||
| + | ${< | ||
| + | </ | ||
| + | * **Get directory of current script** (for instance in order to run a script that is stored in the same directory, or in a known relative path):< | ||
| + | BASEDIR=$(dirname " | ||
| + | </ | ||
| + | * **echo to stderr**, just redirect the output:< | ||
| + | echo " | ||
| + | </ | ||
| + | * **Convert dash-time to ISO** (2024-04-21_15-50-30 to 2024-04-21T15: | ||
| + | sed -r " | ||
| + | </ | ||
| + | * **Get target name of symbolic link**:< | ||
| + | readlink < | ||
| + | </ | ||
| + | * **Execute command**:< | ||
| + | var=`cat file` | ||
| + | var=$(cat file) | ||
| + | </ | ||
| + | * **Evaluate mathematical expression** ('' | ||
| + | echo $((2*3)) | ||
| + | </ | ||
| + | * **time with redirected output** (also works for groups of commands):< | ||
| + | time (cat file1 > file2) | ||
| + | time (cat file1 > /dev/null; sync) | ||
| + | </ | ||
| + | * **Check number of arguments and print usage: | ||
| + | if [[ $# -lt 2 ]]; then | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | </ | ||
| + | * **Load command output as a file: | ||
| + | diff <(grep x file1) <(grep y file2) | ||
| + | </ | ||
| + | * **Remove extension from file name: | ||
| + | ${f%.png} # with all shells | ||
| + | ${f: | ||
| + | </ | ||
| + | |||
| + | |||
