前言

各种 shell 的语法根本记不住,这里整理一个快查文档。

一、bash

cd,ls 有些不是命令而是 bash 内置函数

用途示例说明
执行命令cat 1.txt直接执行 cat ……
变量引用cat $USER.txt 或者 cat ${USER}.txt有比较明确的非字母跟随可以直接使用 $xxx,没有最好使用 ${xxx}
算式运算$[1+2] 或者 $((1+2))两种方式相同
管道cat 1.txt | grep line使用 | 传递上一个命令的 stdout 到下一个命令的 stdin
内嵌命令`pwd` 或者 $(pwd)直接把命令的 stdio 返回,可以设置给变量
查询命令1type pwd显示一个命令的信息(内置、别名或可执行)
查询命令2which pwd显示一个命令的所在路径 (which g => g: aliased to git)
变量设置VAR=1当前 shell 变量,子命令不会享受该变量
删除变量unset VAR删除环境变量
环境变量export VAR=1设置环境变量,子命令也会享受该变量
输出文件echo foo > 1.txt> 覆盖文件
追加文件echo foo >> 1.txt>> 追加到文件最后
顺序执行command1 && command2顺序执行命令,任意一个命令发生失败中断
失败执行command1 || command2顺序执行命令,成功任意一条发生中断并且为成功
后台执行command1 & command2 &同时执行两条命令
条件if [ expression ]; then command1; else command2; fi判断条件走不同命令
循环1arr="a b c";for item in $arr; do echo $item; done循环一个空格分割的字符串
循环2files=$(find . -name '*.h');for item in $files; do echo $item; done循环一个换行分割的字符串

二、fish

cd, ls 是内置脚本

用途示例说明
执行命令cat 1.txt直接执行 cat ……
变量引用cat $USER.txt 或者 cat {$USER}.txt有比较明确的非字母跟随可以直接使用 $xxx,没有最好使用 {$xxx}
算式运算math 1+2fish 内置 math 命令做数学运算
管道cat 1.txt | grep line使用 | 传递上一个命令的 stdout 到下一个命令的 stdin
内嵌命令set x (pwd)直接把命令的 stdio 返回,可以设置给变量
查询命令1type pwd显示一个命令的信息,如果是脚本会显示脚本内容
查询命令2which pwd显示一个命令的所在路径 (which g => g: aliased to git)
删除变量set -e VAR删除环境变量
全局变量设置set -g VAR 1当前 shell 变量,方法内也能访问
变量设置set VAR 1当前 shell 变量,子命令不会享受该变量
环境变量set -x VAR=1设置环境变量,子命令也会享受该变量
输出文件echo foo > 1.txt> 覆盖文件
追加文件echo foo >> 1.txt>> 追加到文件最后
顺序执行command1 && command2顺序执行命令,任意一个命令发生失败中断
失败执行command1 || command2顺序执行命令,成功任意一条发生中断并且为成功
后台执行command1 & command2 &同时执行两条命令
条件if expression; command1; else command2; end判断条件走不同命令
循环set files (find . -name '*.h');for item in $files; echo $item; end循环一个换行分割的字符串

三、powershell

用途示例说明
执行命令Get-Content 1.txt直接执行 Get-Content ……
变量引用Get-Content $PWD/1.txt, Get-Content $(PWD)/1.txt, Get-Content ${PWD}/1.txt有比较明确的非字母跟随可以直接使用 $xxx,没有最好使用 ${xxx}, $(xxx)
算式运算1+2可以直接做数学运算
管道Get-Content ./README.md | Select-String -Pattern 'Run dev'使用 | 传递上一个命令的 stdout 到下一个命令的 stdin
内嵌命令$x=ls直接把命令的 stdio 返回,可以设置给变量
查询命令1Get-Command type显示一个命令的信息,别名,内置函数,命令所在位置
删除变量Remove-Variable $VER删除环境变量
变量设置$VAR=1当前 shell 变量,子命令不会享受该变量
环境变量$Env:VAR=1设置环境变量,子命令也会享受该变量
输出文件echo foo | Set-Content -Encoding utf8 1.txt文本以 utf8 格式覆盖写入
追加文件echo foo | Add-Content -Encoding utf8 1.txt文本以 utf8 格式追加到文件最后
二进制输出Get-Content -AsByteStream 1.txt | Set-Content -AsByteStream 2.txt二进制方式输出
顺序执行1(command1) -and (command2)顺序执行命令,任意一个命令发生失败中断
失败执行1(command1) -or (command2)顺序执行命令,成功任意一条发生中断并且为成功
顺序执行2command1 && command2顺序执行命令,任意一个命令发生失败中断
失败执行2command1 || command2顺序执行命令,成功任意一条发生中断并且为成功
条件if (expression) {command1} else {command2}判断条件走不同命令
循环$files=find . -name '*.h';foreach($item in $files){echo $item}循环一个换行分割的字符串

四、nushell