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: | ||
+ | </ | ||
+ | |||
+ |