2025-12-24
この記事は
プログラミング言語の特有構文 Advent Calendar 2025
https://adventar.org/calendars/12640個人的な好みを交えて紹介します。
二分探索のサンプルコード
言語の特徴をあえて使い実装している。
#!/bin/bash
# Bash - 配列 + 算術展開 + 条件分岐
binary_search() {
local -n arr=$1
local target=$2
local left=0
local right=$((${#arr[@]} - 1))
while ((left <= right)); do
local mid=$(((left + right) / 2))
if ((arr[mid] == target)); then
echo $mid
return
elif ((arr[mid] < target)); then
left=$((mid + 1))
else
right=$((mid - 1))
fi
done
echo -1
}
arr=(1 3 5 7 9)
binary_search arr 5 # 2シェルスクリプトの代表格。今でも現役。
ピックアップ構文
プロセス置換
プロセスの出力をファイルのように扱える<(…)記法。
# <(...) プロセスの出力をファイルとして
diff <(sort file1) <(sort file2)
# >(...) プロセスへの入力として
tee >(grep error > errors.log) >(grep warn > warns.log)変数展開
変数の値を展開し、デフォルト値や文字列操作ができる。
# 基本
name="world"
echo "Hello, $name"
echo "Hello, ${name}"
# デフォルト値
${var:-default} # 未定義ならdefault
${var:=default} # 未定義なら代入も
${var:+value} # 定義済みならvalue
${var:?error} # 未定義ならエラー
# 文字列操作
${#var} # 長さ
${var:0:5} # 部分文字列
${var#pattern} # 前方削除(最短)
${var##pattern} # 前方削除(最長)
${var%pattern} # 後方削除(最短)
${var/old/new} # 置換変数展開は難解な構文だが、多様な文字列加工ができる。
算術展開
$((…))や((…))で算術演算を実行できる。
# ((...)) 算術評価
((x = 5 + 3))
((x++))
((x > 10)) && echo "big"
# $((...)) 算術展開
result=$((5 * 3))
echo $((2 ** 10)) # 1024
echo $((RANDOM % 100))
# let
let "x = x + 1"連想配列
キーと値のペアを格納できる連想配列(ハッシュ)。
# Bash 4+
declare -A map
map[name]="Alice"
map[age]=30
echo ${map[name]}
echo ${!map[@]} # キー一覧Share