Non-modern Shell Programing (1)

Heirloom Bourne ShellとSingle Unix Specificationを教科書に、現代的でないシェルプログラミングについて話す。

#! /bin/sh

set -eu

p() {
    printf '[ %s ]' "$@"
    printf '\n'
}

x=foo
y=bar
p "`p \"\`p \\\"\\\\\\\\$x \\\\\\\\$y\\\"\`\"`"

ぼくたちがシェルだったとしたら、ぼくたちはシェルではないのだけれど、ぼくたちはたぶん以下のように出力する。

[ [ [ \foo \bar ] ] ]

現代的でないシェルプログラミングを始めるにあたって、ダブルクォートとバッククォートの複雑な関係、つまり"\...\"形式のコマンド置換について整理することから始める。現代的でないので、$(...)形式のコマンド置換や算術展開は考慮しない。なお、SUSv4のShell Command Languageを参照する。