ls .
cd -
code .
$()は、コマンド置換。$()内のコマンドを実行し、標準出力のみを受け取って(末尾の改行を取り除き)、文字列を返す。
echo "今日は $(date) です"
# 今日は Wed Nov 15 00:00:00 JST 2025 です
$()だけだと、空行や改行で単語分割されるので、ダブルクォートで囲むようにする。
「シェルは、変数となりうるものは、常にダブルクォートで囲め!!」
| 条件 | 意味 |
|---|---|
| -eq | equal |
| -ne | not equal |
| -gt | greater than |
| -ge | greater than or equal |
| -lt | less than |
| -le | less than or equal |
| 条件 | 意味 |
|---|---|
| -f file | 通常ファイルなら真 |
| -d dir | ディレクトリなら真 |
| -e file | 存在すれば真 |
| -z str | 長さ0なら真 |
| -n str | 長さ>0なら真 |
if [ -f "README.md" ]; then
echo "README.mdは、存在する"
fi
半角スペース等を含むファイルでなければ、"で囲まなくても動く。動くけれども、常に"で囲む癖をつける。
-zは、zero lengthの空文字列なら。-nは、non-zero length。
if構文の構造上、コマンド直後に;をつける。文法上は、;の代わりに改行もOK。
[ ]は、POSIX由来のtestコマンド。bash/zshで動くことが前提なら[[ ]](拡張test構文)を用いる。prec-commitはPOSIXシェルで実行されることも多いため、[ ]が安全。
testコマンドだと、=1つ。POSIXに==という演算子は存在しない。
拡張test構文だと、=1つでも動くが、==2つが推奨。
通常のコマンドは、「a shell builtin」と表示される。
type [
# [ is a shell builtin
type echo
# echo is a shell builtin