universato

基本

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