JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
マニュアルページセクション 1: ユーザーコマンド     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

紹介

User Commands

acctcom(1)

adb(1)

addbib(1)

admin(1)

alias(1)

allocate(1)

amt(1)

appcert(1)

apptrace(1)

apropos(1)

ar(1)

arch(1)

as(1)

asa(1)

at(1)

atq(1)

atrm(1)

audioconvert(1)

audioctl(1)

audioplay(1)

audiorecord(1)

audiotest(1)

auths(1)

auto_ef(1)

awk(1)

banner(1)

basename(1)

basename(1B)

batch(1)

bc(1)

bdiff(1)

bfs(1)

bg(1)

biff(1B)

break(1)

builtin(1)

cal(1)

calendar(1)

case(1)

cat(1)

cd(1)

cdc(1)

cdrw(1)

chdir(1)

checkeq(1)

checknr(1)

chgrp(1)

chkey(1)

chmod(1)

chown(1)

chown(1B)

ckdate(1)

ckgid(1)

ckint(1)

ckitem(1)

ckkeywd(1)

ckpath(1)

ckrange(1)

ckstr(1)

cksum(1)

cktime(1)

ckuid(1)

ckyorn(1)

clear(1)

cmp(1)

col(1)

comb(1)

comm(1)

command(1)

compress(1)

continue(1)

cp(1)

cpio(1)

cpp(1)

cputrack(1)

crle(1)

crontab(1)

csh(1)

csplit(1)

ct(1C)

ctags(1)

ctrun(1)

ctstat(1)

ctwatch(1)

cu(1C)

cut(1)

date(1)

dc(1)

deallocate(1)

decrypt(1)

delta(1)

deroff(1)

df(1B)

dhcpinfo(1)

diff(1)

diff3(1)

diffmk(1)

digest(1)

digestp(1)

dircmp(1)

dirname(1)

dirs(1)

dis(1)

disown(1)

dispgid(1)

dispuid(1)

dos2unix(1)

dpost(1)

du(1)

du(1B)

dump(1)

dumpcs(1)

dumpkeys(1)

echo(1)

echo(1B)

ed(1)

edit(1)

egrep(1)

eject(1)

elfdump(1)

elfedit(1)

elffile(1)

elfsign(1)

elfwrap(1)

encrypt(1)

enhance(1)

env(1)

eqn(1)

errange(1)

errdate(1)

errgid(1)

errint(1)

erritem(1)

error(1)

errpath(1)

errstr(1)

errtime(1)

erruid(1)

erryorn(1)

eval(1)

ex(1)

exec(1)

exit(1)

expand(1)

export(1)

exportfs(1B)

expr(1)

expr(1B)

exstr(1)

factor(1)

false(1)

fastboot(1B)

fasthalt(1B)

fc(1)

fg(1)

fgrep(1)

file(1)

file(1B)

filebench(1)

filep(1)

filesync(1)

filofaxp(1)

find(1)

finger(1)

fmt(1)

fmtmsg(1)

fold(1)

for(1)

foreach(1)

franklinp(1)

from(1B)

ftp(1)

function(1)

gcore(1)

gencat(1)

geniconvtbl(1)

genmsg(1)

get(1)

getconf(1)

getfacl(1)

getlabel(1)

getopt(1)

getoptcvt(1)

getopts(1)

gettext(1)

gettxt(1)

getzonepath(1)

glob(1)

goto(1)

gprof(1)

grep(1)

groups(1)

groups(1B)

grpck(1B)

hash(1)

hashcheck(1)

hashmake(1)

hashstat(1)

head(1)

helpdate(1)

helpgid(1)

helpint(1)

helpitem(1)

helppath(1)

helprange(1)

helpstr(1)

helptime(1)

helpuid(1)

helpyorn(1)

hist(1)

history(1)

hostid(1)

hostname(1)

i386(1)

i486(1)

iconv(1)

if(1)

indxbib(1)

install(1B)

ipcrm(1)

ipcs(1)

isainfo(1)

isalist(1)

jobs(1)

join(1)

jsh(1)

kbd(1)

kdestroy(1)

keylogin(1)

keylogout(1)

kill(1)

kinit(1)

klist(1)

kmdb(1)

kmfcfg(1)

kpasswd(1)

krb5-config(1)

ksh(1)

ksh88(1)

ksh93(1)

ktutil(1)

kvno(1)

lari(1)

last(1)

lastcomm(1)

ld(1)

ldapadd(1)

ldapdelete(1)

ldaplist(1)

ldapmodify(1)

ldapmodrdn(1)

ldapsearch(1)

ldd(1)

ld.so.1(1)

let(1)

lex(1)

lgrpinfo(1)

limit(1)

line(1)

list_devices(1)

listusers(1)

llc2_autoconfig(1)

llc2_config(1)

llc2_stats(1)

ln(1)

ln(1B)

loadkeys(1)

locale(1)

localedef(1)

logger(1)

logger(1B)

login(1)

logname(1)

logout(1)

look(1)

lookbib(1)

lorder(1)

ls(1)

ls(1B)

m4(1)

mac(1)

mach(1)

machid(1)

madv.so.1(1)

mail(1)

Mail(1B)

mail(1B)

mailcompat(1)

mailp(1)

mailq(1)

mailstats(1)

mailx(1)

make(1S)

makekey(1)

man(1)

mconnect(1)

mcs(1)

mdb(1)

mesg(1)

mkdir(1)

mkmsgs(1)

mkstr(1B)

mktemp(1)

moe(1)

more(1)

mp(1)

mpss.so.1(1)

msgcc(1)

msgcpp(1)

msgcvt(1)

msgfmt(1)

msggen(1)

msgget(1)

mt(1)

mv(1)

nawk(1)

nc(1)

ncab2clf(1)

ncakmod(1)

neqn(1)

netcat(1)

newform(1)

newgrp(1)

newsp(1)

newtask(1)

nice(1)

nl(1)

nm(1)

nohup(1)

notify(1)

nroff(1)

od(1)

on(1)

onintr(1)

optisa(1)

pack(1)

packagemanager(1)

page(1)

pagesize(1)

pargs(1)

passwd(1)

paste(1)

patch(1)

pathchk(1)

pax(1)

pcat(1)

pcred(1)

perl(1)

pfbash(1)

pfcsh(1)

pfexec(1)

pfiles(1)

pfksh(1)

pflags(1)

pfsh(1)

pftcsh(1)

pfzsh(1)

pg(1)

pgrep(1)

pkcs11_inspect(1)

pkg(1)

pkgdepend(1)

pkgdiff(1)

pkgfmt(1)

pkginfo(1)

pkglint(1)

pkgmerge(1)

pkgmk(1)

pkgmogrify(1)

pkgparam(1)

pkgproto(1)

pkgrecv(1)

pkgrepo(1)

pkgsend(1)

pkgsign(1)

pkgtrans(1)

pkill(1)

pklogin_finder(1)

pktool(1)

plabel(1)

pldd(1)

plgrp(1)

plimit(1)

pmadvise(1)

pmap(1)

pm-updatemanager(1)

popd(1)

ppgsz(1)

ppriv(1)

pr(1)

praliases(1)

prctl(1)

preap(1)

print(1)

printenv(1B)

printf(1)

priocntl(1)

proc(1)

prof(1)

profiles(1)

projects(1)

prs(1)

prt(1)

prun(1)

ps(1)

ps(1B)

psig(1)

pstack(1)

pstop(1)

ptime(1)

ptree(1)

pushd(1)

pvs(1)

pwait(1)

pwd(1)

pwdx(1)

radadrgen(1)

ranlib(1)

rcapstat(1)

rcp(1)

read(1)

readonly(1)

red(1)

refer(1)

regcmp(1)

rehash(1)

remote_shell(1)

remsh(1)

renice(1)

repeat(1)

reset(1B)

return(1)

rksh(1)

rksh88(1)

rlogin(1)

rm(1)

rmail(1)

rmdel(1)

rmdir(1)

rmformat(1)

rmmount(1)

rmumount(1)

roffbib(1)

roles(1)

rpcgen(1)

rpm2cpio(1)

rsh(1)

runat(1)

rup(1)

rup(1C)

ruptime(1)

rusage(1B)

rusers(1)

rwho(1)

sact(1)

sar(1)

sccs(1)

sccs-admin(1)

sccs-cdc(1)

sccs-comb(1)

sccs-delta(1)

sccsdiff(1)

sccs-get(1)

sccs-help(1)

sccshelp(1)

sccs-prs(1)

sccs-prt(1)

sccs-rmdel(1)

sccs-sact(1)

sccs-sccsdiff(1)

sccs-unget(1)

sccs-val(1)

scp(1)

script(1)

sdiff(1)

sed(1)

sed(1B)

select(1)

set(1)

setenv(1)

setfacl(1)

setlabel(1)

setpgrp(1)

settime(1)

sftp(1)

sh(1)

shcomp(1)

shell_builtins(1)

shift(1)

shutdown(1B)

size(1)

sleep(1)

soelim(1)

sort(1)

sortbib(1)

sotruss(1)

source(1)

sparc(1)

spell(1)

spellin(1)

split(1)

srchtxt(1)

ssh(1)

ssh-add(1)

ssh-agent(1)

ssh-http-proxy-connect(1)

ssh-keygen(1)

ssh-keyscan(1)

ssh-socks5-proxy-connect(1)

stop(1)

strchg(1)

strconf(1)

strings(1)

strip(1)

stty(1)

stty(1B)

sum(1)

sum(1B)

sun(1)

suspend(1)

svcprop(1)

svcs(1)

switch(1)

symorder(1)

sys-suspend(1)

sysV-make(1)

t300(1)

t300s(1)

t4014(1)

t450(1)

tabs(1)

tail(1)

talk(1)

tar(1)

tbl(1)

tcopy(1)

tee(1)

tek(1)

telnet(1)

test(1)

test(1B)

tftp(1)

time(1)

timemanp(1)

times(1)

timesysp(1)

timex(1)

tip(1)

touch(1)

touch(1B)

tplot(1)

tput(1)

tr(1)

tr(1B)

trap(1)

troff(1)

true(1)

truss(1)

tset(1B)

tsort(1)

tty(1)

type(1)

typeset(1)

ul(1)

ulimit(1)

umask(1)

unalias(1)

uname(1)

uncompress(1)

unexpand(1)

unget(1)

unhash(1)

unifdef(1)

uniq(1)

units(1)

unix2dos(1)

unlimit(1)

unpack(1)

unset(1)

unsetenv(1)

until(1)

updatehome(1)

uptime(1)

userattr(1)

users(1B)

uucp(1C)

uudecode(1C)

uuencode(1C)

uuglist(1C)

uulog(1C)

uuname(1C)

uupick(1C)

uustat(1C)

uuto(1C)

uux(1C)

vacation(1)

val(1)

valdate(1)

valgid(1)

valint(1)

valpath(1)

valrange(1)

valstr(1)

valtime(1)

valuid(1)

valyorn(1)

vc(1)

vedit(1)

ver(1)

vgrind(1)

vi(1)

view(1)

vipw(1B)

volcheck(1)

volrmmount(1)

w(1)

wait(1)

wc(1)

what(1)

whatis(1)

whence(1)

whereis(1B)

which(1)

while(1)

who(1)

whoami(1B)

whocalls(1)

whois(1)

write(1)

xargs(1)

xgettext(1)

xstr(1)

yacc(1)

yes(1)

ypcat(1)

ypmatch(1)

yppasswd(1)

ypwhich(1)

zcat(1)

zlogin(1)

zonename(1)

zonestat(1)

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

ksh

, ksh93

, rksh

- Korn シェル。標準および制限付きコマンドとプログラミング言語

形式

ksh [±abcefhikmnoprstuvxBCD] [-R file] [ ±o option] ...
       [-] [arg ...]
rksh [±abcefhikmnoprstuvxBCD] [-R file] [±o option] ...
       [-] [arg ...]

機能説明

ksh は、端末またはファイルから読み取られたコマンドを実行するコマンドおよびプログラミング言語です。rksh は、コマンドインタプリタである ksh の制限付きバージョンです。rksh は、標準シェルより機能が制限されたログイン名や実行環境を設定するために使用します。

シェルに対する引数の意味については、「呼び出し」を参照してください。

定義

メタキャラクタ (metacharacter) は、次のいずれかの文字として定義されます。

; & ( ) | < > NEWLINE SPACE TAB

ブランク (blank) は、タブ (TAB) またはスペース文字 (SPACE) のことです。

識別子 (identifier) は英文字、数字、または下線の並びで、先頭文字は英文字または下線です。識別子は変数名のコンポーネントとして使用されます。

vname は、1 つの識別子、またはピリオド (.) で区切られた複数の識別子の並びです。前にピリオド (.) を付けることもできます。vnames は関数名および変数名として使用されます。

ワード (word) は、引用符なしのメタキャラクタを除く、現在のロケールによって定義された文字セットの文字の並びのことです。

コマンド (command) は、シェル言語の構文にそった文字の並びのことです。シェルは各コマンドを読み取り、指定された動作を直接実行するか、または動作を実行する別のユーティリティーを起動します。組み込みコマンドとは、別のプロセスを作成せずにシェル自体が実行するコマンドです。一部のコマンドは、便宜のためだけに組み込まれているので、このマニュアルページでは説明しません。シェル環境で副作用が発生する組み込みコマンドと、パス検索の実行前に見つかる組み込みコマンド (「実行」を参照) については、このマニュアルページで説明します。歴史的な理由から、これらの組み込みコマンドの中には、ほかの組み込みコマンドと動作が異なり、特殊組み込みコマンドと呼ばれるものがあります。

コマンド

単純コマンド (simple-command) は、変数代入のリストです(「変数代入」を参照)。つまり、ブランクで区切られたワードの並びであり、変数代入のリストが前に置かれることもあります。このマニュアルページの「環境」セクションを参照してください。

先頭のワードは、実行すべきコマンドの名前を指定します。残りのワードは、このセクションで述べる場合を除き、呼び出されたコマンドに引数として渡されます。コマンド名は引数 0 として渡されます。exec(2) を参照してください。単純コマンドの値 (value) は、コマンドの終了ステータスです。正常終了した場合、この値は 0 - 255 です。異常終了した場合は 256+signum です。終了ステータスに対応するシグナルの名前は、組み込みの kill ユーティリティーの -l オプションを使用すると取得できます。

パイプライン (pipeline) は、パイプ ( | ) で区切られた 1 つ以上のコマンドの並びです。最後のコマンドを除き、各コマンドの標準出力は pipe(2) によってその次のコマンドの標準入力と結合されます。最後とみなされるコマンドを除き、各コマンドは別々のプロセスとして実行されます。シェルは最後のコマンドが終了するのを待ちます。パイプラインの終了ステータスは、pipefail オプションが有効になっていないかぎり、最後のコマンドの終了ステータスになります。各パイプラインの前に予約語 ! を指定できます。この場合、パイプラインの終了ステータスは、最後のコマンドの終了ステータスが 0 以外であれば 0 に、0 であれば 1 になります。

リスト (list) は、1 つのパイプライン、または ;、&、|&、&&、または | で区切られた複数のパイプラインの並びです。終わりに、;、&、または |& を記述することもできます。これら 5 つの記号の中で、;、&、および |& の優先度は同じで、&&|| の優先度よりも低くなります。&&| | の優先度は同じです。

セミコロン (;) によって、直前のパイプラインが順次実行されます。アンパサンド記号 (&) によって、直前のパイプラインが非同期的に実行されます。つまりシェルはパイプラインが終了するのを待ちません。|& という記号によって、親シェルに対して双方向パイプが確立された直前のパイプラインが非同期的に実行されます。リダイレクト演算子である <& および >& を引数 p とともにコマンドに適用し、組み込みコマンドである read および print-p オプションを使用すると、生成されたパイプラインの標準入出力を親シェルに書き込んだり、親シェルから読み取ったりできます。&& (||) という記号は、直前のパイプラインの戻り値が 0 の値 (0 以外の値) の場合にのみ、後続のリストを実行します。コマンドの区切りとして、セミコロンの代わりに 1 つ以上の復帰改行をリストに指定できます。リダイレクションで始まっておらず、whileuntil、または if list 内で実行されていない単純コマンドであるリストの最初のパイプラインの最初の項目の前に、セミコロンを指定できます。set 組み込みコマンドでの説明のように、showme オプションが有効になっていないかぎり、このセミコロンは無視されます。

コマンド (command) は、単純コマンドまたは次の一覧に示すコマンドのいずれかです。特に断わりのない限り、コマンドが返す値は、そのコマンド中で最後に実行された単純コマンドの値です。

for vname [ in word ... ] ;do list ;done

for コマンドが実行されるたびに、vname は、in word リストから次に得られる word に設定されます。in word ... を省略すると、for コマンドは、1 から開始するように設定された各定位置パラメータに対して do list を 1 回実行します。リストの word がなくなると、実行は終了します。「パラメータ展開」を参照してください。

(( [expr1] ; [expr2] ; [expr3] )) ;do list ;done

算術式 expr1 が最初に評価されます。算術式 expr2 は評価の結果が 0 になるまで繰り返し評価され、評価の結果が 0 以外であれば list が実行され、算術式 expr3 が評価されます。いずれかの式を省略した場合、その式の評価が 1 になる場合と同様に処理されます。「算術評価」を参照してください。

select vname [ in word ... ] ;do list ;done

select コマンドは、標準エラー (ファイル記述子 2) に、一群のワードをそれぞれの前に番号を付けて出力します。in word... を省略すると、1 から始まる定位置パラメータが使用されます。「パラメータ展開」を参照してください。PS3 プロンプトが出力され、標準入力から行が読み取られます。この行が、リストに示された word のいずれかの番号からなる場合、vname が示す変数の値はこの番号に該当する word に設定されます。この行が空の場合は、再度選択リストを出力します。それ以外の場合は、vname 変数の値を NULL に設定します。標準入力から読み取られた行の内容は、REPLY 変数に保存されます。break またはファイルの終わり (EOF) に行き当たるまで、選択が発生するたびに list が実行されます。list の実行によって REPLY 変数が NULL に設定されると、次の選択を求める PS3 プロンプトの表示前に選択リストが出力されます。

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

case コマンドは、word に一致する最初の pattern に対応した list を実行します。pattern の形式は、ファイル名生成に使用される形式と同じです。「ファイル名の生成」を参照してください。

;; 演算子を使用すると、case の実行が終了します。;; の代わりに ;& を使用した場合、後続のリストが存在するときは、そのリストが実行されます。

if list ;then list [ ;elif list ;then list ] ... [ ;else list ] ;fi

if のあとの list を実行後、0 の終了ステータスが返されると、最初の then のあとの list が実行されます。それ以外の場合、elif のあとの list が実行されます。この値が 0 の場合、次の then のあとの list が実行されます。連続した elif list がすべて失敗すると、else list が実行されます。if list0 以外の終了ステータスを持ち、else list が存在しない場合、if コマンドは 0 の終了ステータスを返します。

while list ;do list ;done
until list ;do list ;done

while コマンドは、while list を繰り返し実行し、リスト内の最後のコマンドの終了ステータスが 0 の場合、do list を実行します。それ以外の場合、ループは終了します。do list 中のコマンドを実行しない場合、while コマンドは 0 の終了ステータスを返します。ループ終了条件の判定を逆にするには、while の代わりに until を使用します。

((expression))

expression は、このマニュアルページで説明する算術評価の規則を使用して評価されます。算術式の値が 0 以外の場合、終了ステータスは 0 です。それ以外の場合、終了ステータスは 1 です。

(list;)

別の環境で list を実行します。入れ子で 2 つの開いた括弧を連続して記述する場合、このセクションで説明するように、算術コマンドとして評価されないようにスペースを挿入する必要があります。

単に list を実行します。メタキャラクタの ( および ) とは異なり、{ および } は予約語なので、認識されるには行の始めまたは ; のあとに現れる必要があります。

[[expression]]

expression を評価し、expression が真のときに 0 の終了ステータスを返します。expression については、「条件式」を参照してください。

function varname { list ;}
varname () { list ;}

varname が参照する関数を定義します。varname. が含まれる関数はディシプリン関数と呼ばれ、varname のうち最後の . の前にある部分は既存の変数を参照している必要があります。

{} の間のコマンド群 (list) が関数の本体になります。function varname の構文で定義された関数を、. という特殊組み込みコマンドの引数として使用すると、その定義に varname() の構文を使用している場合と同等の動作をさせることができます。「関数」を参照してください。

time [ pipeline ]

pipeline を省略すると、現在のシェルおよび完了した子プロセスのユーザーおよびシステム時間が標準エラーに出力されます。それ以外の場合は、pipeline が実行され、経過時間、ユーザー時間、およびシステム時間が標準エラーに出力されます。TIMEFORMAT 変数は、時間情報の表示方法を指定する書式文字列に設定できます。TIMEFORMAT 変数についての詳細は、「シェル変数」を参照してください。

次の予約語は、コマンドの最初のワードであり、かつ引用符を付けずに記述されたときにのみ、予約語と認識されます。

case
do
done
else
elif
esac
for
fi
function
if
select
then
time
until
while
{ }
[[ ]]
!

変数代入

1 つまたは複数の変数代入は、単純コマンドを開始することも、typesetexport、または readonly の特殊組み込みコマンドの引数として使用することもできます。代入の構文は次の形式になります。

varname=word
varname[word]=word

varname= の間、=word の間にスペースを入れることはできません。

varname=(assignlist)

varname= の間にスペースを入れることはできません。assignlist は次のいずれかにできます。

word ...

インデックス付き配列の代入。

[word]=word ...

連想配列の代入。typeset -a を前に付けると、代わりにインデックス付き配列が作成されます。

assignment ...

複合変数代入。これは、varname.name という形式のサブ変数を含んだ複合変数 varname を作成します。ここで name は代入の名前の部分です。varname の値にはすべての代入要素が含まれます。varname のサブ変数に行われた追加の代入は、varname の値の一部としても表示されます。assignment を指定しない場合、varname はサブシーケンスの子要素を定義できる複合変数になります。

typeset [options] assignment ...

入れ子になった変数代入。複数の代入を指定するには、; でそれぞれを区切ります。前の値は、代入前に設定解除されます。

また、前の値への加算または付加を指定するために、= の代わりに += を使用できます。+= を算術タイプに適用すると、word は算術式として評価され、現在の値に加算されます。文字列変数に適用すると、word で定義された値が、この値に付加されます。複合代入の場合、前の値は設定解除されず、型に互換性があれば、新しい値が現在の値に付加されます。

Comments

# で始まるワードがある場合、そのワードと、これ以降の復帰改行までの文字がすべてコメントになり、無視されます。

別名

各コマンドの最初のワードに別名が定義されている場合、そのワードは別名のテキストに置き換えられます。別名は任意の数の文字で構成されます。別名に使用できない文字は、メタキャラクタ、引用符、ファイル展開文字、パラメータ展開文字、コマンド置換文字、および = です。置換文字列としては、「コマンド」セクションで示したメタキャラクタを含む有効なシェルスクリプトを指定できます。置換されたテキスト内にある各コマンドの最初のワードは、置換対象のものを除き、別名についてチェックされます。別名の最後の文字がブランクの場合、別名のあとのワードも別名置換についてチェックされます。

別名を使用すると、組み込みコマンドを再定義できますが、「コマンド」セクションで示した予約語は再定義できません。別名は alias コマンドで作成および一覧表示でき、unalias コマンドで削除できます。

別名化はスクリプトの読み取り時に実行されますが、スクリプトの実行中には行われません。別名を有効にするには、別名を参照するコマンドの読み取り前に、alias コマンドで別名を定義しておく必要があります。次に示す別名は、シェルにコンパイルされますが、設定解除または再定義が可能です。

autoload='typeset -fu'
command='command '
fc=hist
float='typeset -lE'
functions='typeset -f'
hash='alias -t --'
history='hist -l'
integer='typeset -li'
nameref='typeset -n'
nohup='nohup '
r='hist -s'
redirect='command exec'
source='command .'
stop='kill -s STOP'
suspend='kill -s STOP $$'
times='{ { time;} 2>&1;}'
type='whence -v'

チルド置換

別名置換を実行すると、各ワードが引用符なしのチルド (~) で始まっているかどうかがチェックされます。チルド置換の場合、ワードは、パラメータ展開のワード部分も指します。「パラメータ展開」を参照してください。

この場合には、/ までのワードについて、パスワードデータベースのユーザー名と一致するかどうかがチェックされます。一致した場合は、~ および一致したログイン名が一致したユーザーのログインディレクトリに置き換えられます。一致するユーザー名が見つからない場合、元のテキストは変更されません。~ が単独で指定された場合や、後ろに / を伴って指定された場合は、$HOME に置き換えられます。~ のあとに + または - を指定すると、それぞれ $PWD または $OLDPWD の値に置き換えられます。

さらに、変数代入を展開する場合で、代入する値が ~ で始まるとき、および ~ がコロン (:) のあとに置かれているときに、チルド置換が試行されます。:~ ログイン名の終了にも使用されます。

コマンド置換

ドル記号 ($) を前に付けた括弧か、一対の逆引用符 (‘‘) でコマンドを囲むと、その標準出力をワードの一部または全体として使用できます。末尾の復帰改行は削除されます。2 番目の (廃止された) 形式では、コマンドの実行前に、引用符間の文字列に含まれる特殊引用符文字が処理されます。「クォート」を参照してください。

$(cat file) というコマンド置換は、同じ動作で実行速度の速い $(<file) に置き換えることができます。$(n<#) というコマンド置換は、ファイル記述子 n の現在のバイトオフセットに展開されます。

算術置換

ドル記号を前に付けた二重括弧で囲まれた算術式 (つまり ($((arithmetic_expression))) の形式) は、二重括弧内の算術式の値に置き換えられます。

プロセス置換

プロセス置換は、UNIX オペレーティングシステムのバージョンが、開いたファイルに名前を付けるための /dev/fd ディレクトリをサポートしている場合にだけ使用できます。

<(list) または >( list) 形式の各コマンド引数は、list が示すプロセスを実行します。このプロセスは、/dev/fd 中のファイルに非同期的に接続されています。このファイルの名前がコマンドの引数になります。> が付いた形式を使用した場合は、このファイルに書き出すことで list に入力できます。< の形式を使用した場合は、引数として渡されたファイルに list プロセスからの出力が含まれます。

たとえば、

paste <(cut -f1 file1) <(cut -f3 file2) | tee \
     >(process1) >(process2)

これは file1 からフィールド 1 をカットし、file2 からフィールド 3 をカットし、その両者をペーストし、その結果を process1process2 に送ります。さらに標準出力に結果を表示します。引数としてコマンドに渡されるファイルは、UNIX の pipe(2) です。ファイルに対し lseek(2) を行えると想定しているプログラムは動作しません。

パラメータ展開

パラメータは、変数、1 つまたは複数の数字、または *@#?-$! のいずれかの文字です。変数は vname で指定されます。vname. が含まれている変数を作成するには、最後の . の前にあるすべての文字から構成される vname 変数が、すでに存在している必要があります。変数には 1 つの値と、0 個以上の属性が割り当てられます。変数に値と属性を割り当てるには、typeset 特殊組み込みコマンドを使用します。シェルがサポートする属性については、typeset 特殊組み込みコマンドの節で後述します。エクスポートされた変数によって、値と属性が環境に渡されます。

シェルは、インデックス付き配列と連想配列の両方をサポートします。配列変数の要素は、添字 (subscript) によって参照されます。インデックス付き配列の添字は、[] で囲まれた算術式で指定されます (「算術評価」を参照してください)。インデックス付き配列に値を代入するには、set -A vname value ... を使用します。添字の値は必ず 0 から 1,048,575 の範囲内で指定します。インデックス付き配列は宣言する必要はありません。有効な添字を伴う変数の参照は正当であり、必要に応じて配列が作成されます。

連想配列は、typeset-A オプションを使用して作成します。連想配列の添字は、[] で囲まれた文字列で指定されます。

添字なしで配列を参照すると、0 の添字で配列を参照したときと同等の結果になります。

次によって変数に値を代入することもできます。

vname=value [vname=value] ...

または

vname[subscript]=value [vname[subscript]=value] ...

= の前後にスペースを入れることはできません。nameref は、別の変数を参照する変数です。nameref は、typeset-n 属性を使用して作成します。nameref 変数が使用されたときは常に typeset コマンドの実行時点での変数の値が参照されます。nameref の名前にドット (.) を含めることはできません。変数名または関数名に . が含まれ、名前の最初の . までの部分が nameref の名前と一致する場合、nameref の部分を nameref が参照している変数の名前に置き換えることによって、参照される変数が取得されます。namereffor ループのインデックスとして使用すると、リスト内の項目ごとに名前参照が確立されます。nameref を使用すると、関数への引数として名前が渡される変数を、関数内部で簡単に参照できます。たとえば、変数の名前が最初の引数として関数に渡される場合、その関数内のコマンドとして

 typeset -n var=$1

を実行すると、var への参照および代入が、その関数に名前が渡される変数の参照および代入になります。浮動小数点属性 (-E または -F) または整数属性 (-i) のどちらかが vname に対して設定されている場合、このマニュアルページで説明するように、value は算術評価の対象になります。定位置パラメータは数値で設定されるパラメータで、set 特殊組み込みコマンドで値を代入できます。パラメータ $0 は、シェルが呼び出されたときに、引数 0 から設定されます。文字 $ は、置換可能なパラメータを示します。

${parameter}

シェルは、中括弧やメタキャラクタが含まれていても、${ からこれに対応する } までのすべての文字を、同じワードの一部として読み取ります。パラメータの値 (もしあれば) に置き換えられます。中括弧が必要となるのは、parameter のあとに、その名前の一部として解釈してはならない文字、数字、または下線が続く場合、変数名に . が含まれる場合、または変数に添字が付いている場合です。1 つまたは複数の数字からなるパラメータは、定位置パラメータになります。複数の数字からなる定位置パラメータは中括弧で囲む必要があります。parameter* または @ のときは、$1 から始まるすべての定位置パラメータに置き換えられ、フィールド区切り文字で区切られます。配列の vname に添字として * または @ を使用すると、各要素の値に置き換えられ、IFS の値の最初の文字で区切られます。

${#parameter}

parameter* または @ のときは、定位置パラメータの数に置き換えられます。それ以外の場合は、parameter の値の長さに置き換えられます。

${#vname[*]}
${#vname[@]}

配列 vname 内の要素の数に置き換えられます。

${!vname}

vname で参照される変数の名前に展開されます。vname が名前参照である場合を除いて、これは vname です。

${!vname[subscript]}

subscript* または @ でなければ、添字の名前に展開されます。subscript* の場合は、vname の配列添字のリストが生成されます。配列でない変数の場合、変数が設定されていれば値は 0 になります。それ以外の場合は NULL です。subscript@ の場合、$ {vname[ *]} と同じになります。ただし、二重引用符で囲んで使用した場合に、それぞれの配列の添字が別々の引数を生成します。

${!prefix*}

名前が prefix で始まる変数の名前に展開されます。

${parameter:-word}

parameter が設定されており、NULL でない場合は、その値に置き換えられます。それ以外の場合は、word に置き換えられます。

word は、置換された文字列として使用されるまで評価されません。

次の例では、d が設定されていないか、NULL である場合にのみ、pwd が実行されます。

print ${d:-$(pwd)}

式からコロン (:) を省略すると、シェルは parameter が設定されているかどうかだけをチェックします。

${parameter:offset:length}
${parameter:offset}

オフセットを算術式として展開することにより決定される (0 を基準とした) 文字から始まり、length によって定義された算術式によって決定される文字数から構成される parameter の値の部分に展開されます。

2 番目の形式では、値の残りの部分が使用されます。負のオフセットの場合は、parameter の最後から逆方向にカウントします。

シェルが演算子を :- と解釈しないように、1 つまたは複数のブランクをマイナスの記号の前に指定する必要があります。パラメータが * または @ である場合や、* または @ のインデックスが付けられた配列名である場合、offsetlength はそれぞれ配列インデックスと要素数を指します。負の offset は、インデックス付き配列の最大の添字より 1 大きい数値を基準に計算されます。連想配列の順序は不特定です。

${parameter#pattern}
${parameter##pattern}

シェルの patternparameter の値の先頭に一致した場合、この展開式の値は、parameter の値から一致した部分を削除したものになります。それ以外の場合は、この parameter の値に置き換えられます。1 番目の形式では、一致した最小の pattern が削除され、2 番目の形式では、一致した最大の pattern が削除されます。parameter@ または * である場合や、@ または * の添字が指定された配列変数である場合は、部分文字列操作が個々の要素に順番に適用されます。

${parameter%pattern}
${parameter%%pattern}

シェルの patternparameter の値の末尾に一致した場合、この展開式の値は、parameter の値から一致した部分を削除したものになります。それ以外の場合は、parameter の値に置き換えられます。1 番目の形式では、一致した最小の pattern が削除され、2 番目の形式では、一致した最大の pattern が削除されます。parameter が @ または * である場合や、@ または * の添字が指定された配列変数である場合は、部分文字列操作が個々の要素に順番に適用されます。

${parameter/pattern/string}
${parameter// pattern/string}
${parameter/#pattern/string}
${parameter/%pattern/string}

parameter を展開し、一致した最長の pattern を、指定した string に置き換えます。string\n が現れるごとに、parameter の中の n 番目のサブパターンに一致する部分に置き換えられます。

string が NULL の場合、pattern は削除され、string の先頭の / を省略できます。parameter@ または * である場合や、@ または * の添字が指定された配列変数である場合は、置換操作が個々の要素に順番に適用されます。この場合、wordstring 部分が要素ごとに繰り返し評価されます。

1 番目の形式では、最初に現れた pattern だけが置き換えられます。

2 番目の形式では、pattern に一致するごとに、指定した string に置き換えられます。

3 番目の形式では、パターンの一致は string の先頭に制限されます。

4 番目の形式では、パターンの一致は string の末尾に制限されます。

次のパラメータはシェルが自動的に設定します。

#

定位置パラメータ数 (10 進数)

-

呼び出し時、または set コマンドを使用してシェルに適用されるオプション。

?

最後に実行されたコマンドが返した 10 進数。

$

このシェルのプロセス番号。

_

_ の値は、最初は環境に引き渡される実行中のシェルまたはスクリプトの絶対パス名です。その後、直前のコマンドの最後の引数が代入されます。

このパラメータは、非同期式のコマンドに関しては設定されません。このパラメータは、メールのチェック時にも、一致する MAIL ファイルの名前を保持するために使用されます。

!

最後に呼び出されたバックグラウンドコマンドのプロセス番号、または bg 組み込みコマンドでバックグラウンドで実行された最新のジョブのプロセス番号。

.sh.command

DEBUG トラップを処理するときに、この変数には実行しようとしている現在のコマンド行が含まれます。

.sh.edchar

この変数には、KEYBD トラップを処理するときに入力されたキーボード文字 (または、最初の文字が ESC、つまり ASCII 033 である場合には文字の並び) の値が含まれます。トラップアクションの一環として値が変更された場合は、そのトラップを引き起こしたキー (またはキーシーケンス) が新しい値に置き換えられます。このマニュアルページの「キーバインド」を参照してください。

.sh.edcol

最新の KEYBD トラップの時点でのカーソルの文字位置。

.sh.edmode

vi 挿入モード中に KEYBD トラップを処理するときには、値は ESC に設定されます。それ以外の場合は、.sh.edmodeKEYBD トラップを処理するときに NULL になります。このマニュアルページの「vi 編集モード」セクションを参照してください。

.sh.edtext

直前の KEYBD トラップの時点における入力バッファーに含まれていた文字。KEYBD トラップを処理していない場合は、値は NULL です。

.sh.file

現在のコマンドを含むファイルのパス名。

.sh.fun

実行されている現在の関数の名前。

.sh.match

一致した条件付きパターンマッチングのあと、および #%、または / の演算子を使用した変数展開のあとに、最新の一致およびサブパターン一致を保存するインデックス付き配列。0 番目の要素には完全一致を格納し、i 番目の要素には i 番目の部分一致を格納します。展開された変数に新しい値が代入されると、.sh.match 変数は設定解除されます。

.sh.name

ディシプリン関数が呼び出された時点での変数の名前に設定されます。

.sh.subscript

ディシプリン関数が呼び出された時点での変数の名前添字に設定されます。

.sh.subshell

サブシェルおよびコマンド置換の現在の深さ。

.sh.value

set または append ディシプリン関数が呼び出された時点での変数の値に設定されます。

.sh.version

このシェルのバージョンを識別する値に設定されます。

LINENO

実行しているスクリプトまたは関数内での現在の行番号。

OLDPWD

cd コマンドで設定された直前の作業用ディレクトリ。

OPTARG

getopts 組み込みコマンドで処理された最後のオプション引数の値。

OPTIND

getopts 組み込みコマンドで処理された最後のオプション引数のインデックス。

PPID

シェルの親のプロセス番号。

PWD

cd コマンドで設定された現在の作業用ディレクトリ。

RANDOM

この変数が参照されるたびに、0 から 32767 の間で均一に分散した乱整数を生成します。RANDOM に数値を代入すると、乱数の並びを初期化できます。

REPLY

この変数は、引数が指定されない場合、select 文および read 組み込みコマンドによって設定されます。

SECONDS

この変数を参照するたびに、シェルを起動してからの秒数が返されます。この変数に値を代入すると、その値と代入処理実行時からの秒数との合計値が参照時に返されます。

次の変数はシェルによって使用されます。

CDPATH

cd コマンドの検索パスを定義します。

COLUMNS

シェル編集モードおよび選択リスト出力用の編集ウィンドウの幅を定義します。

EDITOR

VISUAL 変数が設定されていない場合、VISUAL で説明するように、この変数の値のパターンがチェックされ、対応する編集オプションが有効になります。

このマニュアルページの「特殊コマンド」セクションの set コマンドを参照してください。

ENV

値に対してパラメータ展開、コマンド置換、および算術置換を実行して、シェルが呼び出されたときに実行されるスクリプトのパス名を生成します。このファイルは通常、別名および関数の定義に使用されます。デフォルト値は $HOME/.kshrc です。

このマニュアルページの「呼び出し」セクションを参照してください。

ENV はシェルでは設定されません。

FCEDIT

hist コマンドのデフォルトのエディタ名を表す廃止済みの名前。HISTEDIT が設定されている場合、FCEDIT は使用されません。

シェルではデフォルト値を FCEDIT に指定しています。

FIGNORE

ファイル名の照合を実行するときに無視される一連のファイル名を定義するパターン。

FPATH

関数定義の検索パス。-u 属性を持つ関数が参照される場合や、コマンドが見つからなかった場合に、このパス内のディレクトリに対して、関数またはコマンドと同じ名前のファイルを検索します。このコマンドの名前の実行ファイルが見つかると、現在の環境に読み込まれ実行されます。PATH とは異なり、現在のディレクトリは、隣接するコロン (:) 文字や先頭または末尾のコロン (:) ではなく、ドット (.) で明示的に表す必要があります。

HISTCMD

履歴ファイル内の現在のコマンドの番号。

HISTEDIT

hist コマンドのデフォルトのエディタ名に使用する名前。

HISTFILE

シェルの起動時にこの変数が設定されていると、その値はコマンド履歴の格納に使用されるファイルのパス名になります。このマニュアルページの「コマンド行の再入力」セクションを参照してください。

HISTSIZE

シェルの起動時にこの変数が設定されていると、このシェルで使用可能な入力済みコマンドの数がこの値以上になります。デフォルト値は 512 です。

HOME

cd コマンドのデフォルト引数 (ホームディレクトリ)。

HOME はシェルでは設定されません。HOMElogin(1) で設定されます。

IFS

内部フィールド区切り文字。通常は、スペース文字、タブ、および復帰改行です。コマンド置換またはパラメータ展開の結果を区切る場合および組み込みコマンドの read でフィールドを区切る場合に使用します。"$*" 置換で引数を区切るときには、IFS 変数の最初の文字が使用されます。このマニュアルページの「クォート」セクションを参照してください。

issspace 文字クラスに属していない IFS 文字、および issspace 文字クラスに属する隣接文字で IFS に含まれているものが、分割対象の文字列に現れるごとに、フィールドが区切られます。issspace 文字クラスに属する文字で IFS に含まれる 1 つまたは複数の文字によって、フィールドが区切られます。また、同じ issspace 文字が IFS の中で並んでいる場合、この文字は issspace クラスに属していない文字として扱われます。つまり、IFS が 2 つのタブ文字から構成されている場合、2 つの隣接するタブ文字によって NULL フィールドが区切られます。

シェルではデフォルト値を IFS に設定しています。

LANG

この変数は、LC_ または LANG で始まる変数で明確に選択されていないすべてのロケールカテゴリを指定します。

LC_ALL

この変数は、LANG 変数とほかのすべての LC_ 変数の値をオーバーライドします。

LC_COLLATE

この変数は、文字照合情報のロケールカテゴリを指定します。

LC_CTYPE

この変数は、文字処理関数のロケールカテゴリを指定します。これは、パターンマッチング用の文字クラスを指定します。このマニュアルページの「ファイル名の生成」セクションを参照してください。

LC_NUMERIC

この変数は、小数点文字のロケールカテゴリを指定します。

LINES

この変数を設定すると、その値は選択 (select) リスト出力用のカラム長の決定に使用されます。選択リストは、LINES が示す行数の約 3 分の 2 がいっぱいになるまで垂直に出力されます。

MAIL

この変数にメールファイルの名前が設定されていて、MAILPATH 変数が設定されていない場合、シェルは指定されたファイルにメールが到着するとユーザーに通知します。

MAIL はシェルでは設定されません。一部のシステムでは、MAILlogin(1) で設定されます。

MAILCHECK

MAILPATH 変数または MAIL 変数で指定されたファイルの更新時間の変更をシェルが何秒ごとにチェックするかを指定します。デフォルト値は 600 秒です。この時間が経過すると、シェルは次のプロンプトを出力する前にチェックします。

シェルではデフォルト値を MAILCHECK に指定しています。

MAILPATH

コロン (:) で区切ったファイル名のリスト。この変数を設定すると、シェルは直前の MAILCHECK 秒間に発生した指定ファイルに対する変更をユーザーに通知します。各ファイル名のあとには ? と、出力されるメッセージを指定できます。このメッセージには、変更されたファイルの名前に変数 $_ を定義して、パラメータ展開、コマンド置換、および算術置換が行われます。デフォルトのメッセージは you have mail in $_ です。

PATH

コマンド用の検索パス。.profile の場合を除き、rksh の環境下で実行する場合、ユーザーは PATH を変更できません。このマニュアルページの「実行」セクションを参照してください。

シェルではデフォルト値を PATH に設定しています。

PS1

この変数の値は、パラメータ展開、コマンド置換、および算術置換用に展開され、1 次プロンプト文字列を定義します。デフォルトは $ です。1 次プロンプト文字列内の文字 ! は、コマンド番号で置き換えられます。! を 2 つ連続して指定すると、プロンプト文字列の出力時に ! が 1 つ表示されます。このマニュアルページの「コマンド行の再入力」セクションを参照してください。

シェルではデフォルト値を PS1 に設定しています。

PS2

2 次プロンプト文字列を指定します。デフォルトは > です。

シェルではデフォルト値を PS2 に設定しています。

PS3

select ループ内で使用する選択プロンプト文字列を指定します。デフォルトは #? です。

シェルではデフォルト値を PS3 に設定しています。

PS4

この変数の値は、パラメータ評価、コマンド置換、および算術置換用に展開され、実行トレースの各行の前に指定されます。デフォルトでは、PS4+ です。PS4 が設定解除されると、実行トレースプロンプトも + になります。

シェルではデフォルト値を PS4 に設定しています。

SHELL

シェルのパス名は環境内に保持されます。呼び出し時に、この変数のベース名が rshrkshrksh、または krsh の場合、シェルの機能は制限されます。

SHELL はシェルでは設定されません。一部のシステムでは、SHELLlogin(1) で設定されます。

TIMEFORMAT

このパラメータの値は、time の予約語が接頭辞として付けられたパイプラインの時間情報を表示する方法を指定する書式文字列として使用されます。% 文字は、時間値またはほかの情報に展開される書式シーケンスの始まりを示します。

書式シーケンスとその意味を次に示します。

%%

リテラルな %

%[p][l]R

秒数での経過時間。

%[p][l]U

ユーザーモードで消費された CPU 時間 (秒)。

%[p][l]S

システムモードで消費された CPU 時間 (秒)。

%P

CPU 時間の割合 (パーセント)。(U + S) / R で計算します。

中括弧は省略可能な部分を示します。省略可能な p は、精度を小数点以下の桁数で指定します。0 の値にすると、小数点と小数点以下は出力されません。最大で、小数点以下第 3 位まで表示できます。p の値が 3 より大きい場合は、3 として扱われます。p が指定されていなければ、3 の値が使用されます。

省略可能な l を指定すると、時間 (0 より大きい場合)、分、秒から構成される HHhMMmSS.FFs という長い形式が使用されます。p の値は、小数点以下を含めるかどうかを指定します。

ほかの文字はすべて変更されずに出力され、末尾に復帰改行が追加されます。設定解除されている場合は、デフォルト値 $'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS' が使用されます。値が NULL の場合、時間情報は表示されません。

TMOUT

TMOUT は、0 より大きな値に設定した場合に、read 組み込みコマンドのデフォルトのタイムアウト値になります。select 複合コマンドは、端末から入力が行われているときに、TMOUT 秒後に終了します。それ以外の場合は、端末からの読み取り中、指定された秒数以内に行が入力されなければ、シェルは終了します。この値をユーザーが超えられないような大きい値に設定してシェルをコンパイルすることもできます。

シェルではデフォルト値を TMOUT に設定しています。

VISUAL

この変数の値がパターン *[Vv][Ii]* に一致した場合、vi オプションが有効になります。「特殊コマンド」を参照してください。値がパターン *gmacs* に一致した場合、gmacs オプションが有効になります。値がパターン *macs* に一致した場合、emacs オプションが有効になります。VISUAL の値は EDITOR の値をオーバーライドします。

フィールド分割

パラメータ展開とコマンド置換後、置換結果からフィールド区切り文字 (IFS に含まれている文字) を検索し、その文字が見つかった位置で分割します。分割されたそれぞれの文字列がフィールドになります。明示的な NULL フィールド ("" または '') は保持されます。暗示的な NULL フィールド、つまり値を持たないパラメータや出力のないコマンド置換から得られたフィールドは削除されます。

braceexpand (-B) オプションが設定されている場合、IFS から得られたそれぞれのフィールドは、1 つまたは複数の中括弧パターンが含まれているかどうかがチェックされます。有効な中括弧パターンは、{*,*}{ l1..l2}{n1..n2}{n1..n2 %fmt} {n1..n2 ..n3}、または {n1..n2 ..n3%fmt} です。ここで、* は任意の文字を表し、l1l2 は英字であり、n1n2n3 は符号付きの数値です。fmtprintf で使用する場合と同様に指定された書式です。どの形式でも、{} の間にある文字から生成されるそれぞれの文字列に対して、{ よりも前にある文字列が前に指定され、} よりも後ろにある文字列が後方に付加されて、フィールドが作成されます。結果となるフィールドは、中括弧パターンを含んでいるかどうかがチェックされます。

1 番目の形式では、{, の間、,, の間、および , と } の間の文字列ごとにフィールドが作成されます。* で表されている文字列には、対応する { と } を引用符で囲まずに埋め込むことができます。それ以外の場合は、* を伴うそれぞれの { および } は、引用符で囲む必要があります。

2 番目の形式では、l1l2 は C ロケールでどちらも大文字か小文字にする必要があります。この場合、フィールドは l1 から l2 までの文字ごとに作成されます。

残りの形式では、フィールド n1 から始まる数値ごとに作成されます。これは、n1n3 ずつ増分して、n2 になるまで続きます。n3 が指定されていない形式では、n1<=n2 の場合は n3 を 1 とみなし、それ以外の場合は -1 とみなして動作します。%fmt が指定されている形式では、すべての書式フラグ、幅、および精度を指定でき、fmt の末尾には任意の指定子 cdiouxX を指定できます。たとえば、{a,z}{1..5..3%02d}{b..c}x は、a01bx、a01cx、a04bx、a04cx、z01bx、z01cx、z04bx、および z4cx の 8 つのフィールドに展開されます。

ファイル名の生成

分割後、-f オプションが設定されていなければ、各フィールドに *?(、および [ の文字が含まれているかどうかが調べられます。これらの文字のいずれかが含まれていると、そのワードはパターンとみなされます。

いずれかのパターン文字を含む各ファイル名コンポーネントは、そのディレクトリのパターンに一致する名前が辞書編集方式の順にソートされたセットに置き換えられます。パターンに一致するファイル名が見つからなかった場合、パターンに接頭辞として ~(N) が付けられていなければ (この接頭辞が付けられた場合は削除されます)、ファイル名のそのコンポーネントは変更されません。FIGNORE が設定されている場合、FIGNORE の値で定義されたパターンに一致したファイル名のコンポーネントそれぞれは、一致したファイル名を生成するときに無視されます。名前 . .. も無視されます。FIGNORE が設定されていない場合、ファイル名の各コンポーネントに対応するパターンの最初の文字が . の文字そのものでないかぎり、このコンポーネントの先頭にある . の文字は無視されます。パターンマッチングのほかの使用法では、/. は特別に扱われません。

*

NULL 文字列を含むあらゆる文字列と一致します。ファイル名の展開に使用した場合で globstar オプションが有効になっているときは、2 つの隣接する * は単独で、すべてのファイルと、0 個以上のディレクトリおよびサブディレクトリに一致します。2 つの隣接する */ を続けると、ディレクトリおよびサブディレクトリだけが一致します。

?

任意の単一文字と一致します。

[...]

囲まれた文字のいずれかと一致します。2 つの文字を - で区切ると、その間にある任意の文字 (その 2 つの文字も含む) に一致します。先頭の [ の次の文字が ! である場合、[ ] で囲まれていない任意の文字と一致します。- は、最初の文字または最後の文字として文字セットに挿入できます。[] の内側では、[:class:] という構文で文字クラスを指定できます。ここで class は、ANSI-C 標準で定義された次のクラスのいずれかになります。

alnum alpha blank cntrl digit graph
lower print punct space upper
word xdigit

word は、alnum に文字 _ を加えたものと同等です。[] の内側では、[=c=] という構文で同値化クラスを指定できます。この構文は、文字 c と同じ 1 次照合ウェイト (現在のロケールで定義) を持つすべての文字に一致します。[] の内側では、[.symbol.] が照合シンボル symbol に一致します。

pattern-list は、1 つのパターン、または & または | で区切られた複数のパターンのリストです。& はすべてのパターンが一致する必要があることを示しますが、| は 1 つのパターンだけ一致すればよいことを示します。複合パターンは、次のサブパターンの 1 つまたは複数から構成できます。

?(pattern-list)

指定されたパターンのいずれかと任意に一致します。

*(pattern-list)

指定されたパターンの 0 回以上の出現と一致します。

+(pattern-list)

指定されたパターンの 1 回以上の出現と一致します。

{n}(pattern-list)

指定されたパターンの n 回の発生に一致します。

{m,n}(pattern-list)

指定されたパターンの m から n 回の出現と一致します。m を省略すると、0 が使用されます。n を省略すると、m 回以上の出現と一致します。

@(pattern-list)

指定されたパターンの 1 つと完全に一致します。

!(pattern-list)

指定されたパターンのいずれにも一致しないものに一致します。

デフォルトでは、各パターンまたはサブパターンは、全体的にもっとも長い一致が生成される可能性のあるもっとも長い文字列に一致します。複数に一致する場合、文字列の先頭にもっとも近いものが選択されます。ただし、それぞれの複合パターンで ( の前に - を挿入すると、指定された pattern-list に一致するもっとも短いものが使用されます。

pattern-list が括弧で囲まれている場合、バックスラッシュ文字 \ は、文字クラスの内部にある場合でも特別に扱われます。すべての ANSI-C 文字エスケープは認識され、指定された文字に一致します。さらに、次のエスケープシーケンスが認識されます。

\d

digit クラスの任意の文字と一致します。

\D

digit クラス以外の任意の文字と一致します。

\s

space クラスの任意の文字と一致します。

\S

space クラス以外の任意の文字と一致します。

\w

word クラスの任意の文字と一致します。

\W

word クラス以外の任意の文字と一致します。

%(pattern-pairs) の形式のパターンは、入れ子になった文字式の照合に使用できるサブパターンです。各 pattern-pair は、2 文字の並びであり、&| を含めることはできません。最初の pattern-pair は照合の開始文字と終了文字を指定します。以降の pattern-pair はそれぞれ、開始文字と終了文字の一致をカウントするときにスキップされる入れ子になったグループの開始文字と終了文字を表します。pattern-pair の最初の文字が次の文字以外の英数字である場合、動作は不確定です。

D

終了文字が現れると、一致が見つからなくてもこのパターンの検索を終了します。

E

終了文字が、エスケープ文字として解釈されます。

L

終了文字が、一致の検索時にすべての文字を無視させる引用符文字として解釈されます。

Q

終了文字が、一致の検索時にエスケープ文字以外のすべての文字を無視させる引用符文字として解釈されます。

%({}Q"E\) は、{ から始まり、対応する } が見つかるまでの文字を照合しますが、二重引用符で囲まれた文字列の中にあるか、エスケープ文字 \ が前に指定されている { または } はカウントしません。{} がない場合、このパターンは任意の C 言語文字列に一致します。

複合パターン内の各サブパターンには、パターン内の ( の位置に応じて、1 から始まる番号が付けられます。\n の並びは、サブパターンそのものと同じ文字列に一致します。ここで、n は 1 桁の数字で \ nn 番目のサブパターンのあとに置かれます。

パターンには ~(options:pattern-list) の形式のサブパターンを含めることができます。options または :pattern-list のどちらかは省略できます。ほかの複合パターンとは異なり、これらのサブパターンは、番号が付けられたサブパターンではカウントされません。options が存在する場合、次の 1 つまたは複数から構成できます。

+

以降のオプションを有効にします。これはデフォルトです。

-

以降のオプションを無効にします。

E

パターンの残りの部分で、egrep(1) コマンドに類似した拡張正規表現の構文を使用します。

F

パターンの残りの部分で、fgrep(1) の表現の構文を使用します。

g

最長の一致を提示します (貪欲)。

これはデフォルトです。

G

パターンの残りの部分で、grep(1) コマンドに類似した基本正規表現の構文を使用します。

i

大文字と小文字を区別せずに一致を扱います。

K

パターンの残りの部分で、シェルパターン構文を使用します。

これはデフォルトです。

l

パターンを左側で固定します。

これは K スタイルパターンのデフォルトです。

N

これは無視されます。ただし、これが最初の文字であり、ファイル名生成で使用され、一致が存在しない場合、ファイルパターンは空の文字列に展開されます。

r

パターンを右側で固定します。

これは K スタイルパターンのデフォルトです。

options:pattern-list の両方を指定した場合、pattern-list だけにオプションは適用されます。それ以外の場合、これらのオプションは次の ~(...) によって無効になるまで、または ~(...) を含むサブパターンの末尾で無効になるまで、有効のままです。

クォート

「定義」で一覧表示したメタキャラクタにはそれぞれ、シェルに対する特別な意味があります。

g

最長の一致を提示します (貪欲)。これはデフォルトです。

i

大文字と小文字を区別せずに一致を扱います。

options:pattern-list の両方を指定した場合、pattern-list だけにオプションは適用されます。それ以外の場合、オプションは後続の ~(...) によって無効になるまで、または ~(...) を含むサブパターンの末尾で無効になるまで、有効のままです。

このマニュアルページの「定義」のセクションに一覧表示したメタキャラクタはそれぞれ、シェルに対して特別な意味を持ち、クォートしないかぎり、ワードの終わりを表します。文字は、その前にバックスラッシュ (\) を指定するとクォートできます。つまり、その文字そのものを示すことができます。\NEWLINE のペアは削除されます。$ が前に指定されていない一対の単一引用符 ('') で囲まれた文字はすべてクォートされます。単一引用符は、単一引用符で囲んで表すことはできません。単一引用符で囲まれた文字列の前にクォートされていない $ がある場合、次の場合を除き、ANSI-C 文字列として処理されます。

\0

残りの文字列が無視されます。

\cx

文字 CTRL-x に展開します。

\C[.name.]

照合要素 name に展開します。

\e

エスケープ文字 (ASCII 033) と同等です。

\E

エスケープ文字 (ASCII 033) と同等です。

一対の二重引用符 ("") の内側では、パラメータとコマンドの置換が発生し、\\`"、および $ をクォートします。二重引用符に囲まれた文字列の前の $ は、C または POSIX ロケールでは無視され、その他のロケールでは、文字列がロケール固有の文字列に置き換えられる場合があります。$*$@ の意味は、クォートされない場合、または変数代入値やファイル名として使用される場合は同じです。ただし、コマンド引数として使用されている場合、"$*""$1d$2d..." と同等です。ここで、d は IFS 変数の先頭文字です。これに対して、"$@""$1" "$2" .... と同等です。逆引用符 (‘‘) の内側では、\ は文字 \、および $ を引用します。逆引用符を二重引用符内で指定すると、\" をクォートします。

予約語や別名が持つ特別な意味は、予約語のいずれかの文字をクォートすることで失われます。関数名や組み込みコマンド名の認識は、それらをクォートしても変えられません。

算術評価

シェルは算術置換に対して算術評価を実行して、算術コマンドを評価し、インデックス付き配列添字を評価し、組み込みコマンド shift および let への引数を評価します。算術評価は、書式オペランドでの数値書式指定子に対応する組み込みコマンド printf での引数オペランドに対しても実行されます。printf(1) を参照してください。評価は、倍精度浮動小数点演算または 4 倍精度浮動小数点 (このデータ型が利用できるシステムの場合) を使用して実行されます。浮動小数点定数は、ANSI-C プログラミング言語の浮動小数点規則に従います。シングルバイト文字定数しか認識されず、文字キャストは認識されませんが、整数定数は、ANSI-C プログラミング言語の整数定数規則に従います。定数の形式には [base#]n を使用できます。base は底を表す 2 から 64 の範囲の 10 進数で、n はその底の数です。9 より大きな数字は、小文字英字、大文字英字、@、および _ でそれぞれ表されます。底が 36 以下の場合は、大文字と小文字を区別せずに使用できます。

算術式には、C 言語の式と同一の構文、優先度、および結合規則が使用されます。浮動小数点の数量に適用される C 言語の演算子をすべて使用できます。さらに、演算子 ** を累乗に使用できます。これは乗算よりも優先度が高く、結合されたままになります。算術変数または部分式の値がロング整数として表現できる場合、C 言語の整数算術演算をすべて実行できます。算術式内では、パラメータ展開構文を使用しなくても、名前で変数を参照できます。変数を参照すると、その値は算術式として評価されます。

C 演算ライブラリにある次の演算ライブラリ関数のいずれも、算術式内で使用できます。

abs acos acosh asin asinh atan atan2 atanh cbrt 
copysign cos cosh erf erfc exp exp2 expm1 fabs
fdim finite floor fma fmax fmod hypot ilogb 
int isinf isnan lgamma log log2 logb 
nearbyint nextafter nexttoward pow remainder
rint round sin sinh sqrt tan tanh tgamma trunc

倍精度浮動小数点の変数の内部表現は、typeset 特殊組み込みコマンドの -E [n] または -F [n] オプションで指定できます。-E オプションを指定すると、値の展開は、展開されるときに、科学表記法を使用して表現されます。省略可能なオプション引数 n は有効数字の桁数を定義します。-F オプションを指定すると、展開は、展開されるときに、浮動小数値として表現されます。省略可能なオプション引数 n は、この場合に、小数点以下の位数を定義します。

整数の変数の内部表現は、typeset 特殊組み込みコマンドの -i [n] オプションで指定できます。省略可能なオプション引数 n は、変数を展開するときに使用する底を指定します。底を指定しない場合、10 の底が使用されます。

算術評価は、-E-F、または -i オプションを使用した変数に対する代入値ごとに実行されます。型が整数である変数に浮動小数点値を代入すると、小数部分が切り捨てられます。

プロンプト

シェルは、対話的に使用すると、パラメータ展開、コマンド置換、および算術置換に展開したあとで、コマンドを読み取る前に、PS1 の値のプロンプトが表示されます。さらに、プロンプト内の単一の ! はそれぞれコマンド番号に置き換えられます。!! が、プロンプト内に ! を指定するには必要です。 復帰改行を入力したあとで、コマンドを完了するためにさらに入力が必要な場合は、2 次プロンプト (PS2 の値) が出力されます。

条件式

条件式 (conditional expression) は、ファイルの属性をテストしたり文字列を比較したりするときに、複合コマンドの [[ とともに使用します。[[]] の間のワードについては、フィールド分割とファイル名生成は実行されません。

各条件式は、次の単項式または 2 項式をいくつか組み合わせて構築できます。

-a file

file が存在すれば、真です。

このオプションは -e と同じです。このオプションは廃止されています。

-b file

file が存在し、ブロック型特殊ファイルであれば、真です。

-c file

file が存在し、文字型特殊ファイルであれば、真です。

-d file

file が存在し、ディレクトリであれば、真です。

-e file

file が存在すれば、真です。

-f file

file が存在し、通常ファイルであれば、真です。

-g file

file が存在し、setgid ビットが設定されていれば、真です。

-G file

file が存在し、ファイルのグループがこのプロセスの実効グループ ID と一致していれば、真です。

-h file

file が存在し、シンボリックリンクであれば、真です。

-k file

file が存在し、スティッキービットが設定されていれば、真です。

-L file

file が存在し、シンボリックリンクであれば、真です。

-n string

string の長さが 0 以外であれば、真です。

-N file

file が存在し、更新時間が最終アクセス時間よりあとであれば、真です。

-o option

option という名前のオプションが有効であれば、真です。

-o ?option

option という名前のオプションが、有効なオプション名であれば、真です。

-O file

file が存在し、このプロセスの実効ユーザー ID がそのファイルを所有していれば、真です。

-p file

file が存在し、FIFO 特殊ファイルまたはパイプであれば、真です。

-r file

file が存在し、現在のプロセスで読み取り可能であれば、真です。

-s file

file が存在し、サイズがゼロより大きければ、真です。

-S file

file が存在し、ソケットであれば、真です。

-t fildes

ファイル記述子番号が fildes であるファイルが開いていて、端末デバイスに対応していれば、真です。

-u file

file が存在し、setuid ビットが設定されていれば、真です。

-w file

file が存在し、現在のプロセスで書き込み可能であれば、真です。

-x file

file が存在し、現在のプロセスで実行可能であれば、真です。file が存在し、ディレクトリである場合は、現在のプロセスにそのディレクトリを検索する権限があれば、真です。

-z string

string の長さがゼロであれば、真です。

file1 -ef file2

file1file2 が存在し、同じファイルを参照していれば、真です。

file1 -nt file2

file1 が存在し、file2 が存在しないか、または file1file2 よりも新しい場合は、真です。

file1 -ot file2

file2 が存在し、file1 が存在しないか、または file1file2 よりも古い場合は、真です。

string

string が NULL でなければ、真です。

string == pattern

stringpattern と一致すれば、真です。pattern の任意の部分をクォートして、文字列として一致させることができます。pattern に一致した場合、.sh.match 配列変数には、その一致とサブパターンの一致が含まれます。

string = pattern

== と同じですが、廃止されました。

string != pattern

stringpattern と一致しなければ、真です。stringpattern に一致した場合、.sh.match 配列には、その一致とサブパターンの一致が含まれます。

string =~ ere

string がパターン ~(E)ere に一致すれば、真です。ere は拡張正規表現です。

string1 < string2

それぞれの文字の ASCII 値に基づいて、string1string2 より小さい場合に、真です。

string1 > string2

それぞれの文字の ASCII 値に基づいて、string1string2 より大きい場合に、真です。

次のそれぞれの式で、file/dev/fd/n (n は整数) という形式の場合は、記述子番号が n である開かれたファイルがテストされます。次の廃止された算術比較がサポートされています。

exp1 -eq exp2

exp1exp2 と等しければ、真です。

exp1 -ge exp2

exp1exp2 以上であれば、真です。

exp1 -gt exp2

exp1exp2 より大きければ、真です。

exp1 -le exp2

exp1exp2 以下であれば、真です。

exp1 -lt exp2

exp1exp2 未満であれば、真です。

exp1 -ne exp2

exp1exp2 と等しくなければ、真です。

次のいずれかを使用して、これらの基本式から複合式を構築できます。優先度の高いものから順に並べてあります。

(expression)

expression が真であれば、真です。式をグループ化するときに使用します。

! expression

expression が偽であれば、真です。

expression1 && expression2

expression1expression2 の両方が真であれば、真です。

expression1 || expression2

expression1expression2 のどちらかが真であれば、真です。

入出力

コマンドの実行前に、シェルが解釈する特殊な表記を使って入出力先を変更 (リダイレクト) できます。次の各項目は、単純コマンド内の任意の位置またはコマンドの前後に指定できますが、起動されたコマンドには引き渡されません。このセクションで示す場合を除き、word または digit を使用する前に、コマンド置換、パラメータ展開、および算術置換が発生します。シェルが対話型であり、パターンが単一のファイルに一致する場合にのみ、ファイル名生成が行われます。フィールド分割は実行されません。

次のリダイレクションのそれぞれで、file/dev/sctp/host/port/dev/tcp/host/ port、または /dev/udp/host/port の形式である場合 (host はホスト名またはホストアドレス、port はサービスの名前または整数のポート番号)、リダイレクションは、対応するソケットへの tcpsctp、または udp 接続を確立しようと試みます。

リダイレクト演算子の文字間にはスペースを入れられません。

<word

word というファイルを標準入力 (ファイル記述子 0) として使用します。

>word

word というファイルを標準出力 (ファイル記述子 1) として使用します。ファイルが存在しない場合は、ファイルを作成します。ファイルが存在し、noclobber オプションが有効である場合は、エラーになります。それ以外の場合は、長さが 0 になります。

>|word

> と同じですが、noclobber オプションを無視します。

>>word

word というファイルを標準出力として使用します。ファイルが存在する場合、(ファイルの終わりまでシークしたあと) そのファイルに出力を追加します。そうでない場合は、ファイルを作成します。

<>word

word というファイルを標準入力として読み書き用に開きます。

<<[-]word

シェルへの入力として、すべてのクォートを削除したあとの word と同一の行まで、またはファイルの終わりまで読み取ります。word に対してパラメータ置換、コマンド置換、算術置換、ファイル名生成を実行しません。here-document が生成されて標準入力になります。word のいずれかの文字がクォートされていると、ドキュメントの文字は解釈されません。それ以外の場合、パラメータ展開、コマンド置換、および算術置換が行われ、\NEWLINE が無視されます。また、\ を使って、\$ の文字をクォートする必要があります。-<< のあとに付加すると、word とドキュメントから先行するタブがすべて取り除かれます。#<< のあとに付加すると、先行するスペース文字とタブがドキュメントの先頭の行から取り除かれ、最大で同じだけのインデントが残りの行と word から取り除かれます。タブ位置は 8 カラムごとであると想定して、インデントは判断されます。

<<<word

パラメータ展開、コマンド置換、算術置換が行われたあとに、word が here-document の内容になる here-document の短い形式。

<&digit

ファイル記述子 digit から標準入力が複製されます。同様に、標準出力については >&digit を使用します。dup(2) を参照してください。

<&digit-

digit で指定されたファイル記述子は標準入力に移動します。同様に、標準出力については >&digit- を使用します。

<&-

標準入力を閉じます。同様に、標準出力については >&- を使用します。

<&p

並行プロセスからの入力を標準入力に移動します。

>&p

並行プロセスへの出力を標準出力に移動します。

<#((expr))

算術式 expr を評価して、その結果得られた値のバイト数分だけファイルの先頭から離れた位置に、ファイル記述子 0 を配置します。expr を評価するときに、CUREOF の変数はそれぞれ、現在のオフセットとファイルの終わりのオフセットに評価されます。

>#((expr))

<# と同じですが、ファイル記述子 1 に適用されます。

<#pattern

パターンを含む次の行の先頭を探します。

<##pattern

<# と同じですが、スキップされるファイルの部分が、標準出力にコピーされる点が異なります。

いずれかのリダイレクト演算子の前に、スペースを入れずに数字を付けると、参照されるファイル記述子番号は (デフォルトの 0 または 1 ではなく) その数字で指定された番号になります。>&->#、および <# 形式以外のリダイレクト演算子のいずれかの前に、スペースを入れずに {varname} を指定すると、シェルでは > 10 のファイル記述子番号が選択され、変数 varname に格納されます。>&-、または >#<# のどちらかの形式の前に {varname} が指定されている場合、varname の値で、閉じるファイル記述子または配置するファイル記述子を定義します。例:

... 2>&1

これは、ファイル記述子 2 をファイル記述子 1 の複製として書き込み用に開くことを意味し、また、

exec [n]<file

これは、読み取り用に file を開き、ファイル記述子番号を変数 n に格納することを意味します。リダイレクションを指定する場合、記述する順序が重要になります。シェルは、評価時点での (file_descriptorfile の) 関連性について、各リダイレクションを評価します。例:

... 1>fname 2>&1

これは、まず fname というファイルにファイル記述子 1 を関連付けます。次に、ファイル記述子 1 (つまり fname) に関連するファイルに、ファイル記述子 2 を関連付けます。リダイレクションの向きが逆の場合は、まずファイル記述子 2 を端末に関連付け (ファイル記述子 1 はすでに端末に関連付けられているとして)、次にファイル記述子 1 をファイル fname に関連付けます。ジョブ制御が有効でない場合にコマンドのあとに & を指定すると、コマンドのデフォルトの標準入力は /dev/null という空ファイルになります。それ以外の場合は、コマンドを実行するための環境に起動側シェルのファイル記述子 (入出力指定で変更可能) が含まれます。

環境

環境とは、実行されるプログラムに渡される、名前と値が対になったリストのことです。通常の引数リストと同様の方法で指定します (environ(5) 参照)。

名前は識別子、値は文字列である必要があります。シェルが環境と対話する方法はいくつかあります。シェルは、起動されると、環境を走査して、見つけた名前ごとに変数を作成し、対応する値および属性を設定し、さらに export というマークを付けます。実行されるコマンドは環境を引き継ぎます。ユーザーがこれらの変数の値を変更するか、新しい変数を作成した場合は、export コマンドまたは typeset -x コマンドを使用すれば、それらの値が環境の一部になります。したがって、実行されるコマンドが参照する環境は、シェルが最初に引き継いだ名前と値のペア (その値は現在のシェルで変更可能) に、export コマンドまたは typeset -x コマンドで指定した変数を加えたものになります。1 つまたは複数の変数代入を先頭に付加すれば、単純コマンドまたは関数の環境を拡張できます。変数代入引数は、identifier=value という形式のワードです。したがって、

TERM=450 cmd args

および

(export TERM; TERM=450; cmd args)

は、cmd の実行に関するかぎり、同じことを意味します。ただし、「組み込みコマンド」セクションで示した特殊組み込みコマンドのうち、ダガーが先頭に置かれているものが指定された場合を除きます。廃止された -k オプションを設定すると、変数代入引数はすべて環境に格納されます。これらの引数がコマンド名のあとに指定された場合も同様です。

次の例では、最初に a=b c を表示し、次に c を表示します。

echo a=b c
set -k
echo a=b c

この機能は、シェルの初期バージョン用に作成されたスクリプトで使用するためのものです。新しいスクリプトには使用しないでください。

関数

歴史的な理由から、関数の定義には、name() 構文と function name 構文の 2 つの方法が存在します。これらについては、このマニュアルページの「コマンド」セクションを参照してください。

シェル関数は内部で読み取られ、保存されます。別名は、関数を読み取るときに解釈されます。関数はコマンドと同様に実行され、引数は定位置パラメータとして渡されます。詳細は、このマニュアルページの「実行」セクションを参照してください。

function name 構文で定義され、名前で呼び出された関数は、呼び出し側と同じプロセスで実行され、すべてのファイルと現在の作業用ディレクトリを呼び出し側と共有します。呼び出し側が受け取るトラップは、関数の内部でデフォルトの動作に再設定されます。関数が受け取らないか、または無視するトラップ条件がある場合、関数は終了し、その条件が呼び出し側に引き渡されます。関数内部で設定された EXIT に基づくトラップは、関数が完了したあとに呼び出し側の環境で実行されます。通常、変数は呼び出し側プログラムと関数の間で共有されます。ただし、関数内で typeset 特殊組み込みコマンドを使用すると、現在の関数をスコープとする局所変数を定義できます。関数内で別の関数を呼び出す際に、これらの局所変数を渡すには、呼び出しの前に変数代入リスト内に指定するか、または名前参照として渡される引数として指定します。関数内でエラーが発生すると、呼び出し側に制御が戻ります。

name() 構文で定義された関数と、function name 構文で定義され . 特殊組み込みコマンドで呼び出された関数は、呼び出し側の環境で実行され、呼び出し側とすべての変数およびトラップを共有します。このような関数の実行中にエラーが発生すると、これらを含むスクリプトは中止されます。

return 特殊組み込みコマンドは、関数の呼び出しから戻るときに使用します。

typeset 特殊組み込みコマンドの -f または +f オプションを使用すると、関数名を一覧表示できます。-f では、関数のテキストがある場合は、これも一覧表示されます。unset 特殊組み込みコマンドの -f オプションを使用すると、関数を未定義状態にできます。

通常、シェルがシェルスクリプトを実行すると、関数は未設定になります。シェルの個別起動をまたがって定義する必要のある関数は、ディレクトリに置き、このディレクトリの名前を FPATH 変数に含めるようにしてください。これらは、ENV ファイルで指定することもできます。

ディシプリン関数

それぞれの変数に、0 個以上のディシプリン関数を関連付けられます。シェルは初期状態で getsetappend、および unset のディシプリン名を認識しますが、ほとんどのシステムでは、builtin 組み込みユーティリティーが持つ C プログラミングインタフェース拡張機能を介して、実行時にほかのディシプリン名を追加できます。変数に対して get ディシプリンが定義されている場合、指定された変数が参照されるたびにこのディシプリンが呼び出されます。ディシプリン関数内で、変数 .sh.value に値が代入された場合、参照される変数は代わりにこの値に評価されます。変数に対して set ディシプリンが定義されている場合、指定された変数に値が代入されるたびにこのディシプリンが呼び出されます。変数に対して append ディシプリンが定義されている場合、指定された変数に値が付加されるたびにこのディシプリンが呼び出されます。変数 .sh.value にはディシプリンを呼び出す前の変数の値が格納され、ディシプリンの完了後、変数には .sh.value の値が代入されます。ディシプリン内で sh.value が設定解除された場合、その値は変更されません。変数に対して unset ディシプリンが定義されている場合、指定された変数が設定解除されるたびに呼び出されます。このディシプリン関数内から明示的に設定解除されないかぎり、変数は設定解除されません。

変数 .sh.name には、ディシプリン関数を呼び出す対象の変数の名前が含まれます。.sh.subscript は変数の添字です。.sh.value には、set ディシプリン関数内で代入される値が含まれます。set ディシプリンの場合、.sh.value を変更すると、代入される値が変更されます。

ジョブ

set コマンドの monitor オプションを有効にすると、対話型シェルがジョブを各パイプラインと関連付けます。このオプションは、jobs コマンドが表示する現在のジョブのテーブルを維持し、これらのジョブに整数番号を割り当てます。ジョブを & で非同期に起動すると、シェルは、次の形式の行を表示します。

[1] 1234

非同期に起動されたジョブはジョブ番号 1 であり、プロセス ID が 1234 であるプロセスが 1 つ (トップレベル) あることを示します。

ジョブの実行中に停止する必要がある場合は、CTRL-z を押して、STOP シグナルを現在のジョブに送信します。シェルは通常、ジョブが停止されたことを示すメッセージを表示し、別のプロンプトを表示します。これで、このジョブの状態を bg コマンドでバックグラウンドで処理するか、またはほかのコマンドを実行してから、fg というコマンドでジョブをフォアグラウンドに移すことができます。CTRL-z はただちに効果を発揮します。つまり CTRL-z は、保留中の出力や読み取られていない入力がただちに中止されるという点で、割り込みに似ています。

バックグラウンドで実行中のジョブは、端末から読み取ろうとすると停止します。通常バックグラウンドジョブは出力を生成できますが、sttytostop というコマンドを指定すればこの出力生成も無効にできます。この tty オプションを設定すると、バックグラウンドジョブは、入力の読み取り時と同様に出力を生成しようとすると停止します。

シェル内のジョブを参照する方法はいくつかあります。そのジョブのいずれかのプロセスの ID を使っても、また次のいずれかを使っても参照できます。

%number

指定された番号のジョブ。

%string

コマンド行が string で始まるジョブ

%?string

コマンド行に string を含むジョブ

%%

現在のジョブ

%+

%% と同等

%-

直前のジョブ

シェルは、プロセスの状態が変更されると、ただちにそれを検出します。ジョブがブロックされてそれ以上進めない状態になると、プロンプトを発行する直前にだけ、シェルはその旨をユーザーに通知します。これは、ユーザーの作業の妨げにならないようにするためです。set コマンドの notify オプションを設定すると、変更が起きるとすぐに、シェルはこれらのジョブ変更メッセージを出力します。

monitor オプションが有効になっていると、バックグラウンドジョブが完了するたびに、CHLD に対して設定されているトラップをトリガーします。

ジョブの実行または停止中にシェルを終了しようとすると、停止中 (実行中) のジョブがある旨の警告 (You have stopped(running) jobs) が表示されます。jobs コマンドを使用して、それらのジョブが何かを表示できます。ただちにシェルを再終了しようとすると、シェルは 2 度目の警告は出さず、停止中のジョブは終了します。ログインシェルは、HUP シグナルを受信すると、disown 組み込みコマンドで所有解除されていない各ジョブに HUP シグナルを送信します。

シグナル

起動されたコマンドに対する INT シグナルと QUIT シグナルは、コマンドの後ろに & が指定され、ジョブの monitor オプションが有効でない場合、無視されます。それ以外の場合は、シェルが親から引き継いだ値がシグナルに含まれます。trap 組み込みコマンドを参照してください。

実行

コマンドが読み込まれるたびに、置換が実行されます。コマンド名は、このマニュアルページの「特殊組み込みコマンド」セクションで記した、いずれかのコマンドと一致した場合、現在のシェルプロセス内で実行されます。次に、コマンド名がユーザー定義関数と一致するかどうかがチェックされます。一致する場合は、定位置パラメータが保存され、関数呼び出しの引数に再設定されます。関数は現在のシェルプロセスでも実行されます。関数が完了するか、return を発行すると、定位置パラメータリストが復元されます。function name 構文で定義された関数の場合、関数内の EXIT に設定されているトラップが実行されます。関数の終了値は、最後に実行されたコマンドの値です。コマンド名が、特殊組み込みコマンドやユーザー定義関数ではなく、組み込みコマンドの 1 つである場合は、現在のシェルプロセスで実行されます。

PATH というシェル変数は、コマンドを含んでいるディレクトリの検索パスを定義します。2 つのディレクトリ名は、コロン (:) で区切ります。デフォルトのパスは /bin:/usr/bin: で、/bin/usr/bin、現在のディレクトリの順に指定されています。現在のディレクトリは、複数のコロンを連続して記述するか、パスリストの始めか終わりにコロンを付ければ指定できます。コマンド名にスラッシュ (/) が含まれている場合は、検索パスは使用されません。スラッシュが含まれていなければ、指定された名前の、ディレクトリではない実行可能ファイルが、パスの各ディレクトリで検索されます。実行可能ファイルが見つかった場合、および指定されたパス名に対応するコマンドの組み込みバージョンがあるとシェルが判断した場合は、現在のプロセスでこの組み込みコマンドが呼び出されます。実行可能ファイルが見つかり、このディレクトリが FPATH 変数の値にも含まれている場合は、設定済みの別名だけが展開される点を除いて . コマンドの引数である場合と同様にこのファイルは現在のシェル環境に読み込まれ、このマニュアルページで説明するように、指定された名前の関数が実行されます。実行可能ファイルが見つからず、ファイル .paths が見つかり、このファイルに FPATH=path という形式の行が含まれ (path は既存のディレクトリ)、指定されている名前のファイルがこのディレクトリに含まれている場合、このファイルは、. 特殊組み込みコマンドの引数である場合と同様に現在のシェル環境に読み込まれ、指定された名前の関数が実行されます。これら以外で実行可能ファイルが見つかった場合は、プロセスが作成され、exec(2) を使用してコマンドの実行が試行されます。

実行可能ファイルが見つかった場合、そのファイルが見つかったディレクトリ内で .paths という名前のファイルが検索されます。このファイルが見つかり、そこに BUILTIN_LIB=value という形式の行が含まれている場合、builtin -f のオプション引数である場合と同様に value で名前が付けられたライブラリが検索されます。指定された名前の組み込みコマンドが含まれている場合、この名前のコマンドではなく組み込みコマンドが実行されます。これ以外でこのファイルが見つかり、その最初の行または 2 行目に name= value の形式の行が含まれている場合、value で指定されたディレクトリをディレクトリリストの先頭に加えることによって、環境変数 name が変更されます。value が絶対ディレクトリでない場合は、実行可能ファイルが見つかったディレクトリに対する相対ディレクトリとしてディレクトリが指定されます。環境変数 name がまだ存在しない場合は、指定されたコマンドの環境リストに追加されます。

ファイルが実行権を有するが、それが a.out ファイルでない場合、シェルコマンドの入ったファイルとみなされます。そのファイルを読み取るときは、別のシェルが生成されます。この場合、エクスポートされていない変数はすべて削除されます。シェルコマンドファイルに読み取り権がない場合またはファイルに setuid および setgid ビットが設定されている場合、あるいはその両方の場合、シェルはエージェントを実行します。そして、このエージェントがアクセス権を設定し、開かれているファイルとして渡されたシェルコマンドファイルでシェルを実行します。括弧で囲まれたコマンドは、エクスポートされていない変数を削除することなく、サブシェルで実行されます。

コマンド行の再入力

端末装置から最近入力された HISTSIZE が示す個数 (デフォルトは 512 個) のコマンドのテキストは、履歴ファイルに保存されています。$HOME/.sh_history というファイルは、HISTFILE 変数が設定されていない場合、または変数が示すファイルが書き込み不可能な場合に使用されます。シェルは、同じ名前の HISTFILE を使用する対話型シェルすべてのコマンド履歴を使用できます。hist という組み込みコマンドは、このファイルの一部を一覧表示または編集するときに使用します。編集またはリスト表示されるファイルの部分は、番号か、またはコマンドの最初の文字を指定することによって選択できます。単一のコマンドを指定することも、コマンドの範囲を指定することも可能です。hist の引数としてエディタプログラムが指定されていないと、HISTEDIT という変数の値が使用されます。HISTEDIT が設定されていない場合、廃止された変数 FCEDIT が使用されます。FCEDIT が未定義の場合は、/bin/ed が使用されます。エディタを終了したときに、編集されたコマンドは出力され再実行されます。ただし、書き込まずに終了した場合は除きます。-s オプション (廃止されたバージョンではエディタ名 -) を指定すると、編集段階が省かれ、コマンドが再実行されます。この場合、old=new という形式の代入パラメータを使用すれば、実行前にコマンドを変更できます。たとえば、'hist -s' の別名として定義されている設定済みの別名 r を使用して、`r bad=good c' と入力すると、c という文字で始まるコマンドのうち最新のものが、その記述中の最初の bad という文字列を good に置き換えて再実行されます。

インライン編集オプション

通常、端末装置から入力する各コマンド行では、コマンドのあとに復帰改行 (RETURN または LINE FEED) しか入力できません。emacsgmacsvi のいずれかのオプションが有効な場合、ユーザーはコマンド行を編集できます。いずれかの編集モードにするには、対応するオプションを設定します。編集オプションは、いずれかのオプション名で終了する値を VISUAL 変数または EDITOR 変数に代入するたびに、自動的に選択されます。

編集機能では、ユーザーの端末が RETURN を改行のないキャリッジリターンとして扱うこと、およびスペース文字がスクリーン上の現在の文字を上書きすることが必要です。

multiline オプションが有効になっていないかぎり、編集モードは、ユーザーがウィンドウを介して現在の行を見るという概念を実現します。ウィンドウ幅は、COLUMNS が定義されていればその値になり、未定義の場合は 80 になります。ウィンドウの幅が小さすぎて、プロンプトを表示すると入力用に 8 カラム以上残すことができない場合は、プロンプトが左端から切り捨てられます。ウィンドウ幅から 2 を引いた長さより行が長い場合は、ウィンドウの終わりにマークを表示してユーザーに通知します。カーソルが移動し、ウィンドウの境界に達すると、ウィンドウはカーソルを中心としてセンタリングされます。行がウィンドウの右端、左端、または両端を超えている場合は、それぞれ ><、* のマークが使用されます。

各編集モードでは、検索コマンドから履歴ファイルにアクセスできます。パターンではなく文字列だけがマッチングの対象になります。ただし、文字列の先頭に ^ があると、マッチングの開始位置が行の先頭に限定されます。

それぞれの編集モードには、部分的に入力したワードに一致するファイルまたはコマンドを一覧表示する操作が用意されています。行の最初のワードか、;|&、または ( のあとの最初のワードに適用され、ワードの先頭が ~ でなく、ワードに / が含まれない場合、部分的なワードに一致する可能性のある、PATH 変数で定義された別名、関数、実行可能なコマンドのリストが表示されます。それ以外の場合、指定されたワードに一致するファイルのリストが表示されます。部分的に入力されたワードにファイル展開文字が含まれない場合、これらのリストを生成する前に、* が付加されます。生成されたリストを表示したあとで、入力行が再描画されます。これらの操作はそれぞれ、コマンド名一覧表示、ファイル名一覧表示と呼ばれます。ほかにもコマンド名補完とファイル名補完と呼ばれる操作があります。これらの操作では、一致するコマンドまたはファイルのリストを作成しますが、リストを出力するのではなく、現在のワードを完全一致または部分一致と置き換えます。ファイル名補完の場合、一致が 1 つしかなければ、ファイルがディレクトリの場合は / が付加され、ファイルがディレクトリでない場合はスペースが付加されます。それ以外の場合は、一致したファイルすべてに共通するもっとも長い接頭辞がワードと置き換えられます。コマンド名補完の場合、ファイル名のうち最後の / 以降の部分だけが、もっとも長いコマンド接頭辞の検出に使用されます。1 つの名前しかこの接頭辞に一致しない場合、ワードはコマンド名にスペースを続けた文字列に置き換えられます。補完にタブを使用した場合で複数の一致が存在したときは、後続のタブで、一致する代替候補の番号付きリストが表示されます。選択番号に続けてタブを入力することにより、特定の項目を選択できます。

キーバインド

KEYBD トラップは、キーの入力時にキーを傍受して、実際にシェルで表示される文字を変更するために使用できます。このトラップは、端末からの読み取り中に文字 (または、最初の文字が ESC のときは文字の並び) が入力されるたびに実行されます。

変数 .sh.edchar には、トラップを生成した文字または文字の並びが含まれます。トラップアクションで .sh.edchar の値を変更すると、シェルは、元の値ではなく新しい値がキーボードから入力された場合と同じように動作します。変数 .sh.edcol は、入力時点のカーソルの入力カラム番号に設定されます。変数 .sh.edmode は、vi 挿入モードのときに ESC に、それ以外の場合に NULL に設定されます。.sh.edchar に代入された値の前に ${.sh.editmode} を付けると、シェルは、まだ制御モードになっていない場合はこのモードに切り替わります。

このトラップは、編集指令への引数として入力された文字や、文字検索の入力を読み取っているときは呼び出されません。

emacs 編集モード

emacs または gmacs オプションを有効にすると、対応する編集モードに移行します。この 2 つのモードは、^T の扱い方だけが異なります。編集を行うには、ユーザーは訂正が必要な位置にカーソルを移動し、必要に応じて文字やワードを挿入または削除します。編集用のコマンドは、いずれも制御文字またはエスケープシーケンスです。制御文字は、キャレット (^) とそれに続く文字で表記されます。

たとえば、^F は CTRL/F を表します。これは、CTRL (コントロール) キーを押しながら f キーを押して入力します。シフトキーは押しません。(^? は DEL (削除) キーを表します。)

エスケープシーケンスは M- とそれに続く文字で表記されます。たとえば、M-f (メタ f と呼ぶ) は ESC キー (ASCII 033) に続いて f を押すことで入力します。M-F は ESC のあとに F を押すことを表します。

すべての編集コマンドは、行の先頭だけでなく、行のどこからでも実行できます。特に断りのないかぎり、編集コマンドのあとに RETURN キーや LINE FEED キーは入力しません。

^F

カーソルを 1 文字だけ前方 (右) に移動します。

M-[C

カーソルを 1 文字だけ前方 (右) に移動します。

M-f

カーソルを 1 ワードだけ前方に移動します。emacs エディタでは、「ワード」は英文字、数字、および下線からなる文字列を意味します。

^B

カーソルを 1 文字だけ後方 (左) に移動します。

M-[D

カーソルを 1 文字だけ後方 (左) に移動します。

M-b

カーソルを 1 ワードだけ後方に移動します。

^A

カーソルを行の先頭に移動します。

M-[H

カーソルを行の先頭に移動します。

^E

カーソルを行の末尾に移動します。

M-[Y

カーソルを行の末尾に移動します。

^]char

現在の行で文字 char が次に現れる位置にカーソルを移動します。

M-^]char

現在の行で文字 char が前に現れる位置にカーソルを移動します。

^X^X

カーソルとマークを入れ替えます。

erase

前の 1 文字を削除します。ユーザー定義の消去文字は、stty(1) コマンドで定義され、通常は、^H または # です。

lnext

次の文字の編集機能を無効にします。ユーザー定義の次のリテラル文字は、stty(1) コマンドによって定義されます。定義されていない場合は ^V です。

^D

現在の文字を削除します。

M-d

現在のワードを削除します。

M-^H

メタバックスペース。直前のワードを削除します。

M-h

直前のワードを削除します。

M-^?

メタ DEL。直前のワードを削除します。割り込み文字が ^? (デフォルトの DEL) である場合、このコマンドは動作しません。

^T

emacs モードでは、現在の文字を前の文字と入れ替え、カーソルを進めます。gmacs モードでは、直前の 2 つの文字を入れ替えます。

^C

現在の文字を大文字にします。

M-c

現在のワードを大文字にします。

M-l

現在のワードを小文字にします。

^K

カーソルから行の末尾までを削除します。直前に指定された数値パラメータの値が現在のカーソル位置より小さい場合は、指定された位置の文字から現在のカーソル位置の文字までを削除します。直前に指定された数値パラメータの値が現在のカーソル位置より大きい場合は、現在のカーソル位置の文字から指定された位置の文字までを削除します。

^W

カーソル位置の文字からマークまでを抹消します。

M-p

カーソル位置からマークまでの領域をスタックにプッシュします。

kill

現在の行全体を抹消します。ユーザー定義の抹消文字は、stty(1) コマンドで定義され、通常は ^G または @ です。2 つの抹消文字を連続して入力すると、そのあとの kill 文字はすべて改行を意味します。プリンタ端末 (印字式端末) を使用している場合に便利です。

^Y

行から最後に削除された項目を復元します。つまり、退避していた項目を行に戻します。

^L

改行を行い、現在の行を出力します。

M-^L

画面を消去します。

^@

NULL 文字。マークを設定します。

M-space

メタスペース文字。マークを設定します。

^J

復帰改行。現在の行を実行します。

^M

復帰。現在の行を実行します。

EOF

現在の行が NULL の場合のみ、end-of-file 文字 (通常は ^D) をファイルの終わりとして処理します。

^P

直前のコマンドを取り出します。^P を入力するたびに、さらに前のコマンドにアクセスします。複数行にまたがるコマンドで最初の行でない場合は、1 行戻ります。

M-[A

^P と同等です。

M-<

もっとも古いコマンド行の履歴を取り出します。

M->

もっとも新しいコマンド行の履歴を取り出します。

^N

次のコマンド行を取り出します。^N を入力するたびに、さらに次のコマンドにアクセスします。

M-[B

^N と同等です。

^Rstring

履歴をさかのぼって、string を含むコマンド行を検索します。パラメータとして 0 を指定すると、順方向に検索します。string の終わりは復帰改行 (RETURN または NEWLINE) で示します。string の先頭に ^ が付加されると、その文字列で始まるコマンドだけを検索します。string を省略すると、直前に指定した文字列を含む次のコマンド行にアクセスします。この場合、パラメータとして 0 を指定すると検索方向が逆になります。

^O

(Operate) 現在の行を実行し、現在の行に対する次の行を履歴ファイルから取り出します。

M-digits

エスケープ。数値パラメータを定義します。digits は次のコマンドに対するパラメータとみなされます。パラメータを受け入れるコマンドは、^F^BERASE^C^D^K^R ^P^N^]M-.M-M-^]M-_M-=M-bM-cM-dM-fM-hM-l、および M-^H です。

M-letter

(ソフトキー) 別名リストから、名前 letter の別名を検索します。letter の別名が定義されている場合、入力待ち行列にその値を挿入します。letter は、このセクションで示したいずれかのメタ関数を示す文字であってはいけません。

M-[letter

(ソフトキー) 別名リストから、名前 letter の別名を検索します。この名前の別名が定義されている場合、入力待ち行列にその値を挿入します。これは、多くの端末でファンクションキーをプログラムするために使用できます。

M-.

直前のコマンドの最後のワードを行に挿入します。数値パラメータが指定されると、最後のワードではなくその数値が示す位置のワードを挿入します。

M-_

M-. と同じです。

M-*

現在のワードに対してファイル名生成を試行します。ワードがどのファイルにも一致しない場合や、特殊パターン文字を含んでいない場合、アスタリスクが付加されます。

M-ESC

このマニュアルページで説明したコマンド名補完またはファイル名補完。

^ITAB

このマニュアルページで説明したコマンド名補完またはファイル名補完を試行します。部分補完が起きた場合、これを繰り返すと、M-= を入力した場合と同様に動作します。一致が見つからない場合、またはスペース文字のあとに入力されている場合は、タブが挿入されます。

M-=

数値パラメータが前に付いていない場合、このマニュアルページで説明するように、一致するコマンドまたはファイル名のリストを生成します。それ以外の場合は、カーソルの下のワードが、もっとも新しく生成されたコマンドまたはファイルリストからの数値パラメータの値に対応する項目で置き換えられます。カーソルがワードの上にない場合、代わりにワードが挿入されます。

^U

次のコマンドのパラメータを 4 倍します。

\

次の文字をエスケープします。編集用文字、ユーザーが設定した消去文字、抹消文字、および割り込み文字 (通常は ^?) は、その前に \ を指定すれば、コマンド行または検索文字列に入力できます。\ は、次の文字の編集機能 (もしあれば) を無効にします。

M-^V

シェルのバージョンを表示します。

M-#

行の先頭が # でない場合、行の先頭と各復帰改行のあとに # が挿入され、行が入力されます。これによって、履歴ファイルにコメントを挿入できます。行の先頭が # である場合、# が削除され、各復帰改行のあとの # も 1 つずつ削除されます。

vi 編集モード

2 つの入力モードがあります。初期状態では、コマンドを入力すると入力モードに移行します。編集するには、ユーザーは、エスケープ (ESC) キー (033) を入力して制御モードに移行し、訂正が必要な箇所にカーソルを移動してから、必要に応じて文字やワードを挿入または削除します。ほとんどの制御コマンドでは、コマンドの先頭に繰り返し数を指定できます。

ほとんどのシステムでは、vi モードに移行した直後は標準処理が有効になります。端末の回線速度が 1200 ボー以上であり、制御文字が含まれているか、またはプロンプトが表示されてからの経過時間が 1 秒未満であれば、コマンドが再度表示されます。ESC 文字を入力すると、コマンドの残りの部分に対する標準処理が終了し、ユーザーはコマンド行を変更できるようになります。この方式には、標準処理で raw モードの先行入力表示機能を利用できるという利点があります。

viraw オプションも設定すると、端末の標準処理を常に無効にできます。このモードは、行の終わりの区切りを示す 2 つの代替記号をサポートしていないシステムでは暗黙的に設定されており、特定の端末で便利なことがあります。

入力編集コマンド

デフォルトでは、エディタは入力モードになります。

次の入力編集コマンドがサポートされています。

ERASE

ユーザーが stty コマンドで定義した消去文字。通常は ^H または #。前の 1 文字を削除します。

^W

直前の、ブランクで区切られたワードを削除します。一部のシステムでは、この機能には viraw オプションが必要です。

EOF

行の先頭の文字として使用すると、ignoreeof オプションが設定されないかぎり、シェルが終了します。それ以外の場合、この文字は無視されます。

lnext

stty(1) によって定義した、ユーザー定義の次のリテラル文字。定義されていない場合は ^V。次の文字の編集機能がある場合はこれを無効にします。一部のシステムでは、この機能には viraw オプションが必要です。

\

次の ERASE または KILL 文字をエスケープします。

^I TAB

このマニュアルページで説明したコマンド名補完またはファイル名補完を試行し、入力モードに戻ります。部分補完が起きた場合、これを繰り返すと、制御モードから = を入力した場合と同様に動作します。一致が見つからない場合、またはスペース文字のあとに入力されている場合は、タブが挿入されます。

移動編集コマンド

移動編集コマンドはカーソルを移動します。

次の移動編集コマンドがサポートされています。

[count]l

カーソルを 1 文字だけ前方 (右) に移動します。

[count][C

カーソルを 1 文字だけ前方 (右) に移動します。

[count]w

英数字から構成されるワード 1 つ分だけカーソルを前方に移動します。

[count]W

ブランクのあとに続く次のワードの先頭にカーソルを移動します。

[count]e

カーソルをワードの終わりに移動します。

[count]E

ブランクで区切られた現在のワードの終わりにカーソルを移動します。

[count]h

カーソルを 1 文字だけ後方 (左) に移動します。

[count][D

カーソルを 1 文字だけ後方 (左) に移動します。

[count]b

カーソルを 1 ワードだけ後方に移動します。

[count]B

ブランクで区切られた直前のワードにカーソルを移動します。

[count]|

count が示すカラムにカーソルを移動します。

[count]fc

現在の行で文字 c が次に現れる位置にカーソルを移動します。

[count]Fc

現在の行で文字 c が前に現れる位置にカーソルを移動します。

[count]tC

fh を連続して実行した場合と同等です。

[count]Tc

Fl を連続して実行した場合と同等です。

[count];

直前の単一文字検索コマンドの fFt、または Tcount の数だけ繰り返します。

[count],

直前の単一文字検索コマンドを count の数だけ逆方向で実行します。

0

カーソルを行の先頭に移動します。

^

カーソルを行の先頭に移動します。

[H

行に含まれる最初のブランク以外の文字にカーソルを移動します。

$

カーソルを行の末尾に移動します。

[Y

カーソルを行の末尾に移動します。

%

現在の位置にある括弧記号 (){}[、または ] に対応する括弧記号にカーソルを移動します。このセクションで説明したどの文字の上にもカーソルが置かれていない場合は、いずれかの文字で最初に現れるものを行の残りから検索します。

検索編集コマンド

検索編集コマンドはコマンド履歴にアクセスします。

次の検索編集コマンドがサポートされています。

[count]k

直前のコマンドを取り出します。k を入力するたびに、さらに前のコマンドにアクセスします。

[count]-

直前のコマンドを取り出します。k を入力するたびに、さらに前のコマンドにアクセスします。

k と同等です。

[count][A

直前のコマンドを取り出します。k を入力するたびに、さらに前のコマンドにアクセスします。

k と同等です。

[count]j

次のコマンドを取り出します。j を入力するたびに、さらに次のコマンドにアクセスします。

[count]+

次のコマンドを取り出します。j を入力するたびに、さらに次のコマンドにアクセスします。

j と同等です。

[count][B

次のコマンドを取り出します。j を入力するたびに、さらに次のコマンドにアクセスします。

j と同等です。

[count]G

コマンド番号 count を取り出します。デフォルトでは、もっとも古いコマンド履歴を取り出します。

/string

履歴をさかのぼって、string を含むコマンドを検索します。string の終わりは復帰改行 (RETURN または NEWLINE) で示します。string の先頭に ^ が付加されると、その文字列で始まるコマンドだけを検索します。string が NULL の場合は、直前に指定された文字列を使用します。

?string

履歴を順方向に調べて、string を含むコマンドを検索します。string の終わりは復帰改行 (RETURN または NEWLINE) で示します。string の先頭に ^ が付加されると、その文字列で始まるコマンドだけを検索します。string が NULL の場合は、直前に指定された文字列を使用します。

/ と同じですが、順方向に検索します。

n

直前の / または ? コマンドで指定されたパターンと一致する次のパターンを逆方向に検索します。

N

直前の / または ? で指定されたパターンと一致する次のパターンを順方向に検索します。

テキスト変更編集コマンド

次のコマンドは行を変更します。

a

入力モードに移行し、現在の文字のあとにテキストを入力します。

A

行の終わりにテキストを追加します。$a と同等です。

[count]cmotion
c[count]motion

現在の文字から motion によりカーソルが移動する先までの文字を削除し、入力モードに移行します。motionc の場合は、行全体を削除して入力モードに移行します。

C

現在の文字から行の終わりまでを削除し、入力モードに移行します。c$ と同等です。

S

cc と同等です。

[count]s

入力モードで、カーソルの下にある文字を置き換えます。

D[count]dmotion

現在の文字から行の終わりまでを削除します。d$ と同等です。

d[count]motion

現在の文字から motion によりカーソルが移動する先までの文字を削除します。motion が d の場合は、行全体を削除します。

i

入力モードに移行し、現在の文字の前にテキストを入力します。

I

行の先頭にテキストを挿入します。0i と同等です。

[count]P

カーソルの前に、直前のテキスト変更を挿入します。

[count]p

カーソルのあとに、直前のテキスト変更を挿入します。

R

入力モードに移行して、画面上の文字を重ね打ちした文字に置き換えます。

[count]rc

現在のカーソル位置から始まる count 個の文字を c に置き換え、カーソルの位置を進めます。

[count]x

現在の文字を削除します。

[count]X

直前の文字を削除します。

[count].

直前のテキスト変更コマンドを繰り返します。

[count]~

現在のカーソル位置から始まる count 個の文字を、大文字の場合は小文字に、小文字の場合は大文字に変換して、カーソルの位置を進めます。

[count]_

直前のコマンドの count 個のワードを付加し、入力モードに移行します。count を省略すると、最後のワードを使用します。

*

* を現在のワードのあとに付加し、ファイル名を生成しようとします。一致するものが見つからない場合は、ベルを鳴らします。見つかった場合は、ワードを一致したパターンで置換し、入力モードに移行します。

\

このマニュアルページで説明したコマンド名補完またはファイル名補完。

その他の編集コマンド

次のその他の編集コマンドがサポートされています。

[count]ymotion
y[count]motion

現在の文字から motion によりカーソルが移動する先の文字までを退避します。退避した文字を削除用バッファーに入れます。テキストとカーソル位置は変更されません。

yy

現在の行を退避します。

Y

現在のカーソル位置から行の末尾まで、現在の行を退避します。y$ と同等です。

u

直前のテキスト変更コマンドを取り消します。

U

現在の行で実行されたテキスト変更コマンドをすべて取り消します。

[count]V

コマンド

hist -e ${VISUAL:-${EDITOR:-vi}} count

を入力バッファーに返します。count を省略した場合、現在の行が使用されます。

^L

改行を行い、現在の行を出力します。このコマンドは制御モードでのみ機能します。

^J

復帰改行。モードに関係なく、現在の行を実行します。

^M

復帰。モードに関係なく、現在の行を実行します。

#

コマンドの先頭文字が # であれば、その # および復帰改行に続くそれぞれの # を削除します。

先頭文字がほかの文字であれば、# をコマンドの各行の先頭に挿入後、行を送ります。

このコマンドは、現在の行をコメントとして履歴に挿入する場合や、履歴ファイルに含まれる以前のコメント化されたコマンドをコメント解除する場合に便利です。

[count]=

count が指定されていない場合、このマニュアルページで説明するように、一致するコマンドまたはファイル名のリストを生成します。

指定されている場合は、現在カーソルが置かれているワードを、もっとも新しく生成したコマンドまたはファイルリストからの count 項目に置き換えます。カーソルがワードの上にない場合は、現在のカーソル位置のあとに挿入されます。

@letter

別名リストから、名前 letter の別名を検索します。この名前の別名が定義されている場合、処理用の入力待ち行列にその値を挿入します。

^V

シェルのバージョンを表示します。

組み込みコマンド

次の単純コマンドは、シェルプロセス中で実行されます。入出力のリダイレクトが可能です。特に断りのないかぎり、出力はファイル記述子 1 上に書き込まれ、構文エラーがなければ終了ステータスは 0 です。:truefalseechonewgrp、および login を除くすべての組み込みコマンドで、オプションの終わりを示す -- を受け入れます。また、オプション --man を、マニュアルページを標準エラーに出力するように求める要求と解釈し、-? を、使用法に関するメッセージを標準エラーに出力するように求めるヘルプ要求と解釈します。

1 つまたは 2 つの ++ 記号が先頭に付加されているコマンドは特殊組み込みコマンドであり、次のような特殊な処理を受けます。

  1. コマンドが完了しても、コマンドの直前の変数代入リストは依然として有効です。

  2. 入出力のリダイレクトは変数代入後に行われます。

  3. エラーが発生すると、それを含むスクリプトは中止されます。

  4. これらは有効な関数名ではありません。

  5. 変数代入形式で、++ から始まるコマンドに続くワードは、変数代入と同一の規則で展開されます。つまり、チルド置換は = 符号のあとに実行され、フィールド分割とファイル名生成は実行されません。

+ : [arg ...]

パラメータの展開だけを行います。

+ . name [arg ...]

namefunction name 予約語構文で定義された関数である場合、この関数は、現在の環境で実行されます (name() 構文で定義されている場合と同様)。それ以外の場合で name がファイルを示しているときは、ファイルの全体が読み取られ、コマンドは現在のシェル環境で実行されます。PATH によって指定された検索パスを用いて、ファイルを含むディレクトリを探します。引数の arg が指定されている場合、. コマンドの処理中にこの引数が定位置パラメータになり、終了すると元の定位置パラメータが復元されます。そうでない場合、定位置パラメータは変更されません。終了ステータスは、最後に実行されたコマンドの終了ステータスです。

++ alias [-ptx] [name[ =value]] ...

alias 引数なしの場合、このコマンドは標準出力上に name=value という形式の別名のリストを表示します。-p オプションを指定すると、それぞれの別名の前に alias というワードが挿入されます。1 つまたは複数の引数が指定された場合、value が指定された name ごとに、alias が定義されます。value の末尾にスペースがあると、次のワードが別名置換指定かどうかをチェックします。廃止された -t オプションは、検索済みの別名を設定または一覧表示します。検索済み別名の値は、指定した name に対応する完全パス名になります。PATH の値を再設定するとこの値は未定義になりますが、別名は検索済みのままです。-t オプションを省略すると、value が指定されていない引数リスト内の各 name について、別名の名前と値を表示します。廃止された -x オプションは効果がありません。name が指定されているが、value は指定されておらず、name に対する別名も定義されていない場合は、終了ステータスは 0 以外になります。

bg [ job...]

このコマンドを使用できるのは、ジョブ制御をサポートするシステム上だけです。指定された各 job をバックグラウンドで実行します。job が省略された場合は、現在のジョブをバックグラウンドで実行します。job の形式については、このマニュアルページの「ジョブ」セクションを参照してください。

+ break [n]

for ループ、while ループ、until ループ、または select ループがあれば終了します。n を指定すると、n レベル分だけループを終了します。

builtin [-ds ] [-f file] [name ...]

name-f オプションを指定しない場合、組み込みコマンドは標準出力に出力されます。-s オプションを指定すると、特殊組み込みコマンドだけが出力されます。それ以外の場合、それぞれの name は、組み込みコマンドの名前をベース名として持つパス名を表します。エントリポイントの関数名は、組み込みコマンド名の前に b を付けることによって決定されます。組み込みコマンド mycommand に対する ISO C/C++ プロトタイプは bmycommand(int argc, char *argv[], void *context) です。ここで、argvargc 要素の配列であり、context は、<ast/shell.h> に記述された Shell_t 構造体への省略可能なポインタです。特殊組み込みコマンドは、パス名にバインドしたり、削除したりできません。-d オプションを指定すると、それぞれの特殊組み込みコマンドが削除されます。動的読み込みをサポートするシステムでは、-f オプションは、組み込みコマンドのコードを含んだ共有ライブラリの名前を指定します。共有ライブラリの接頭辞または接尾辞 (それぞれシステムに応じて異なる)、あるいはその両方を省略できます。ライブラリが読み込まれると、そのシンボルを後続の builtin の呼び出しで使用できるようになります。複数のライブラリを指定するには、builtin コマンドを別個に呼び出します。ライブラリは、指定された順序とは逆の順序で検索されます。ライブラリが読み込まれると、ライブラリ内で lib_init() という名前の関数が検索され、0 の引数を付けてこの関数が呼び出されます。

cd [-LP] [arg]
cd [-LP] old new

このコマンドには 2 つの形式があります。

第 1 の形式は、現在のディレクトリを arg に変更します。arg- の場合、ディレクトリを直前のディレクトリに変更します。シェル変数 HOME の値がデフォルトの arg になります。PWD 変数は、現在のディレクトリに設定されます。シェル変数 CDPATH は、arg を含むディレクトリの検索パスを定義します。2 つのディレクトリ名は、コロン (:) で区切ります。デフォルトのパスは空の文字列です (現在のディレクトリを指定)。現在のディレクトリは空のパス名で指定します。このパス名は、等号の直後か、パスリスト内にある区切り文字のコロンの間に指定します。arg の先頭文字が / の場合、検索パスは使用しません。それ以外の場合は、パス中の各ディレクトリで arg を検索します。

cd の第 2 の形式は、PWD 中の現在のディレクトリ名に含まれる old という文字列を new という文字列に置換し、この新規のディレクトリへ変更しようとします。デフォルトでは、ディレクトリ名を検索するときに、シンボリックリンク名は入力されたとおりに扱われます。これは、-L オプションと同等です。-P オプションを指定すると、ディレクトリを決定するときに、シンボリックリンクが解決されます。コマンド行の -L または -P の最後の指定によって、使用されるメソッドが決まります。cd コマンドは rksh では実行できません。

command [-pvVx] name [arg ...]

-v または -V オプションを指定しない場合、arg で指定された引数で name が実行されます。

-p オプションを指定すると、PATH の値で定義されたパスではなく、デフォルトのパスが検索されます。name を探すときに、関数は検索されません。さらに、name が特殊組み込みコマンドを指す場合、先頭にダガーが付いた特殊なプロパティーは考慮されません。たとえば、redirect='command exec' という定義済みの別名を使用すると、無効なリダイレクションが指定された場合にスクリプトが終了しません。

-x オプションを指定すると、引数が多すぎるためにコマンドの実行が errno E2BIG というエラーになる場合に、シェルは、各呼び出しで引数のサブセットを指定して、コマンド name を複数回呼び出します。複数の引数に展開する最初のワードの前の引数と、複数の引数に展開する最後のワードのあとの引数は、各呼び出しに渡されます。終了ステータスは呼び出しの最大終了ステータスです。

-v オプションを指定した場合、command は、このセクションで説明する whence 組み込みコマンドと同等になります。-V オプションを指定した場合、commandwhence -v と同じように機能します。

+continue [n]

for ループ、while ループ、until ループ、または select ループの次の繰り返しを実行します。n を指定すると、n 番目のループから実行します。

disown [job...]

ログインシェルが終了するときに、シェルが、指定された各 job、または job が省略されている場合はすべての活動中のジョブに HUP シグナルを送信しません。

echo [arg ...]

最初の arg の先頭が - ではなく、どの引数にもバックスラッシュ (\) が含まれていない場合、各引数をスペース文字で区切り、復帰改行で終了する形式で出力します。それ以外の場合は、echo の動作はシステムによって異なるため、このセクションで説明する print または printf を使用するようにしてください。使用法と説明については、echo(1) を参照してください。

+eval [arg ...]

引数をシェルへの入力として読み取り、生成されるコマンドを実行します。

+exec [-c] [-a name ...] [arg ...]

arg を指定すると、このシェルの代わりに、引数で指定されたコマンドを (新規プロセスは生成せずに) 実行します。-c オプションを指定すると、exec の呼び出しに関連付けられた変数代入を適用する前に、環境がクリアされます。-a オプションを指定すると、最初の arg ではなく name が、新しいプロセスの argv[0] になります。入出力引数が指定可能で、現在のプロセスに影響を及ぼす場合があります。arg を指定しない場合は、ファイル記述子が、入出力リダイレクトリストの指定どおりに変更されることになります。この場合、この機能によりオープンされた 2 より大きい番号のファイル記述子は、別のプログラムを起動するとクローズされます。

+exit [n]

シェルを、n が示す終了ステータスで終了させます。具体的には、指定した値の最下位 8 ビットが終了ステータスの値となります。n を省略すると、最後に実行されたコマンドの終了ステータスがシェルの終了ステータスになります。ignoreeof オプションが有効になっているシェルを除き、ファイルの終わりを検出した場合もシェルが終了します。set を参照してください。

++export [-p] [name[=value]] ...

name を指定しない場合、エクスポート属性を持つ各変数の名前と値は、再入力可能な形式で値がクォートされて出力されます。-p オプションを指定すると、それぞれの変数の前に export というワードが挿入されます。それ以外の場合は、指定された name に、あとで実行されるコマンドの環境へ自動的にエクスポートされるようにマークが付きます。

false

何も行わず、1 を返して終了します。until とともに使用すると無限ループになります。

fg [job ...]

このコマンドを使用できるのは、ジョブ制御をサポートするシステム上だけです。指定された各 job を、指定された順序でフォアグラウンドで実行し、待機させます。job が指定されないと、現在のジョブをフォアグラウンドで実行します。job の記述形式については、「ジョブ」を参照してください。

getconf [name [pathname]]

name で指定された構成パラメータの現在の値を出力します。構成パラメータは、IEEE POSIX 1003.1 および IEEE POSIX 1003.2 標準で定義されます。pathconf(2) および sysconf(3C) を参照してください。

pathname 引数は、値がファイルシステムでの場所によって異なるパラメータで必要です。引数を指定しない場合、getconf は、現在の構成パラメータの名前と値を出力します。パス名 / は、pathname を必要とする各パラメータで使用されます。

getopts [ -a name] optstring vname [arg ...]

arg が正当なオプションを示しているかどうかをチェックします。arg を省略すると、定位置パラメータが使用されます。オプション引数は + または - で始まります。+- 以外の文字で始まっているオプション、または引数が -- である場合、オプションは終了します。+ で始まっているオプションは、optstring+ で始まっている場合にのみ認識されます。optstring には、getopts が認識する文字を記述します。文字のあとに : が続く場合、そのオプションには引数があるとみなされます。オプションと引数とはブランクで区切ることができます。オプション -? を指定すると、getopts は、標準エラーに使用法に関するメッセージを生成します。-a オプションを使用すると、使用法に関するメッセージに使用する名前を指定できます。これはデフォルトで $0 です。getopts は、呼び出されるごとに、次に見つかったオプション文字を変数 vname 内に格納します。arg+ で始まっている場合、オプション文字の前に + が付けられます。次の arg のインデックスは OPTIND に格納されます。オプション引数がある場合は OPTARG に格納されます。optstring の先頭に : がある場合は、getopts は無効なオプション文字を OPTARG に格納し、vname? (未定義のオプションが指定された場合) または : (必要なオプション引数が省略されている場合) に設定します。getopts はエラーメッセージを表示します。オプションがなくなると、終了ステータスは 0 以外になります。:+-?[、および ] のオプションを指定する方法はありません。オプション # は、最初のオプションとしてのみ指定できます。

hist [ -e ename][-nlr] [ first[last ] ]
hist -s [ old=new ] [ command]

第 1 の形式では、端末から最近入力された HISTSIZE 個のコマンドの中から、first から last までの範囲のコマンドを選択します。firstlast の両引数は、数値または文字列で指定できます。指定された文字列で始まる最新のコマンドを見つけるには、文字列を使用します。負の数値は、現在のコマンド番号からのオフセットとなります。-l オプションを指定すると、標準出力上にコマンドを一覧表示します。指定しないと、これらのキーボードコマンドの入ったファイル上で ename というエディタプログラムを起動します。ename を指定しない場合、変数 HISTEDIT の値が使用されます。HISTEDIT が設定されていない場合、FCEDIT (デフォルトは /bin/ed) がエディタとして使用されます。編集が完了すると、変更が保存されていれば、編集されたコマンドが実行されます。last を指定しない場合、first と同一値に設定されます。first を指定しない場合、デフォルトは、編集については直前のコマンドに、一覧表示については -16 になります。-r オプションはコマンドの順序を逆にします。-n オプションは一覧表示時にコマンド番号の出力を抑止します。第 2 の形式では、command は、このセクションで説明した first と解釈され、デフォルトで最後に実行されたコマンドに設定されます。old=new の省略可能な置換を行なったあとで、結果として得られるコマンドが実行されます。

jobs -lnp [job ...]

指定された各ジョブに関する情報を一覧表示します。job 引数を省略すると、活動中のジョブすべてに関する情報を一覧表示します。-l オプションは、通常の情報に加えてプロセス ID も表示します。-n オプションは、前回通知を受けたあとに停止または終了したジョブだけを表示します。-p オプションは、プロセスグループだけを表示します。job の記述形式については、「ジョブ」を参照してください。

kill [-s signame] job ...
kill [-n signum] job ...
kill -l [sig ...]

TERM (終了) シグナルまたは指定されたシグナルのいずれかを、指定されたジョブまたはプロセスに送信します。シグナルは、-n オプションの場合には番号で、-s オプションの場合には名前で指定されます。名前は、<signal.h> の定義から SIG という接頭辞を取り除いたものになります。ただし SIGCLDCHLD という名前になります。下位互換性を確保するため、n および s を省略でき、番号または名前を - の直後に指定できます。送信するシグナルが TERM (終了) または HUP (ハングアップ) の場合、停止中のジョブまたはプロセスには CONT (継続) シグナルを送信します。job という引数は、活動中のジョブではないプロセスのプロセス ID を指定することもできます。job の記述形式については、「ジョブ」を参照してください。第 3 の形式の kill -l では、sig が指定されていない場合、シグナル名が一覧表示されます。それ以外の場合は、名前である sig ごとに、対応するシグナル番号が一覧表示され、番号である sig ごとに、sig の下位 8 ビットに対応するシグナル名が一覧表示されます。

let [arg ...]

arg は、評価の対象となる個々の算術式を表します。算術式の評価については、このマニュアルページの「算術評価」セクションを参照してください。終了ステータスは、最後の式の値が 0 以外の場合は 0 で、0 の場合には 1 です。

+newgrp [arg ...]

exec /bin/newgrp arg ... と同機能です。

print [-Renprs] [ -u unit] [ -f format ] [ arg ...]

オプションを指定しない場合、または --- のオプションを指定した場合、標準出力にそれぞれの arg が出力されます。-f オプションを指定すると、引数は、printf の記述に従って出力されます。この場合、enrR オプションが無視されます。それ以外の場合は、-R または -r が指定されていないかぎり、次のエスケープ規則が適用されます。

\a

警告文字 (ASCII 07)

\b

バックスペース文字 (ASCII 010)

\c

print は、引数をこれ以上処理せず、復帰改行を追加せずに終了します。

\f

用紙送り文字 (ASCII 014)

\n

復帰改行文字 (ASCII 012)

\r

復帰文字 (ASCII 015)

\t

タブ文字 (ASCII 011)

\v

垂直タブ文字 (ASCII 013)

\E

エスケープ文字 (ASCII 033)

\\

バックスラッシュ文字 \

\0x

x で指定された 1、2、または 3 桁の 8 進数文字列で定義された文字

-R オプションは、-n を除く後続の引数およびオプションすべてを表示します。-e を指定すると、エスケープ規則が適用されます。これがデフォルトの動作です。前の -r の効果を逆転させます。-p オプションを指定すると、引数は、標準出力ではなく |& で生成されたプロセスのパイプに書き込まれます。-s オプションを指定すると、引数は、標準出力ではなく履歴ファイルに書き込まれます。-u オプションを使用すると、出力を格納する 1 桁のファイル記述子ユニット番号 unit を指定できます。デフォルト値は 1 です。-n オプションを指定した場合、復帰改行は出力に追加されません。

printf format[arg ...]

引数 arg は、書式文字列 format に関連付けられた ANSI-C 書式設定規則に従って、標準出力に出力されます。引数の数が書式指定の数を超えた場合、書式文字列が、残りの引数の書式設定に再使用されます。次の拡張機能も使用できます。%s の代わりに %b 書式を使用すると、対応する arg 内のエスケープシーケンスを print の記述に従って展開できます。%B オプションを指定すると、各引数が変数名として扱われ、変数のバイナリ値が出力されます。これは、b の属性を持つ変数にもっとも役立ちます。%H 形式を %s の代わりに使用すると、HTMLXML で特殊な arg 内の文字をそのエンティティー名として出力できます。%s の書式の代わりに %P を使用すると、arg を拡張正規表現として解釈し、シェルパターンとして出力できます。%s の書式の代わりに %R を使用すると、arg をシェルパターンとして解釈し、拡張正規表現として出力できます。%s の書式の代わりに %q を使用すると、結果として得られる文字列を、シェルへの再入力に使用できるような形式にクォートできます。%(date-format)T の書式を使用すると、引数を日付/時間文字列として扱い、date(1) コマンドで定義されている date-format に従って日付/時間を書式設定できます。%Z の書式は値が 0 のバイトを出力します。%d の書式の精度フィールドのあとには、. と出力の底を続けることができます。この場合、# フラグ文字を指定することにより、底となる数字が前に置かれるようになります。# フラグを、出力の底なしで d 指定子とともに使用すると、単位を示す k M G T P E のいずれかの接尾辞とともに、出力が 1000 の累乗の単位で表示されます。# フラグを、i 指定子とともに使用すると、単位を示す Ki Mi Gi Ti Pi Ei のいずれかの接尾辞とともに、出力が 1024 の累乗の単位で表示されます。指定したフィールド幅内で出力が中央になるように調整する = フラグが追加されています。

pwd [-LP]

現在の作業ディレクトリの値を出力します。-L オプションはデフォルトです。現在のディレクトリの論理名を出力します。-P オプションが指定された場合、すべてのシンボリックリンクが名前から解決されます。コマンド行の -L または -P の最後の指定によって、使用されるメソッドが決まります。

read [-Aprs] [-d delim] [ -n n] [[ -N n ] [[-t timeout] [-u unit] [vname?prompt] [ vname ... ]

シェルの入力メカニズムです。1 つの行を読み取り、IFS が示す文字を、区切り文字として使用して、行の内容をいくつかのフィールドに分割します。エスケープ文字 \ は、次の文字の特別な意味または行の継続に関する意味を取り除くために使用します。-d オプションを指定すると、読み取りは復帰改行ではなく delim の最初の文字まで続けられます。-n オプションを指定すると、行全体ではなく、最高で n バイトが読み取られますが、低速デバイスから読み取る場合には、何らかの文字を読み取ったらすぐに返ります。-N オプションを指定すると、ファイルの終わりにならないかぎり、または -t オプションのために読み取りがタイムアウトしないかぎり、正確に n バイトを読み取ります。-r で指定する raw モードでは、\ が持つこの特殊な意味は無視されます。第 1 フィールドを 1 番目の vname に、第 2 フィールドを 2 番目の vname にという順番で割り当てていき、余ったフィールドがあれば最後の vname に割り当てます。vname にバイナリ属性があり、-n または -N が指定された場合、読み取られたバイトは、直接変数に格納されます。-v が指定された場合、端末装置から読み取るときに、1 番目の vname の値がデフォルト値として使用されます。-A オプションを指定すると、変数 vname が設定解除され、読み取られた各フィールドは、インデックス付き配列 vname の連続した要素に格納されます。-p オプションは、シェルが |& を使用して生成したプロセスの入力パイプから入力行を取り出します。-s オプションは、入力をコマンドとして履歴ファイルに保存します。-u オプションは、読み取り元となるファイル記述子番号を 1 桁の数値 unit で指定します。ファイル記述子は、exec という特殊組み込みコマンドで開くことができます。ユニット n のデフォルト値は 0 です。-t オプションは、端末またはパイプから読み取るときに、秒数でタイムアウトを指定します。vname を省略すると、REPLY の値をデフォルトとして使用します。-p オプションが指定されていてファイルの終わりを検出すると、このプロセスをクリアし別のプロセスを作成可能にします。最初の引数が ? を含んでいると、シェルが対話型のとき、このワードの残りを標準エラーに対するプロンプトとして使用します。ファイルの終わりに到達するか、読み取りがタイムアウトしないかぎり、終了ステータスは 0 です。

++readonly [-p] [ vname[=value]] ...

vname を指定しない場合、読み取り専用属性を持つ各変数の名前と値は、再入力可能な形式で値がクォートされて出力されます。-p オプションを指定すると、それぞれの変数の前に readonly というワードが挿入されます。それ以外の場合は、指定された vname は読み取り専用としてマークされ、これらの名前は、以降の代入で変更できなくなります。

+return [n]

シェル関数またはスクリプトを、n で指定された終了ステータスで呼び出し側スクリプトに戻します。具体的には、指定した値の最下位 8 ビットが終了ステータスの値となります。n を省略すると、戻りステータスは最後に実行されたコマンドの戻りステータスになります。関数やスクリプトの外で return を呼び出すと、exit と同じ動作を行います。

+set [ ±BCGabefhkmnoprstuvx] [±o [ option ] ] ... [ ±A vname] [arg...]

set コマンドには、次のオプションを設定できます。

-a

定義される後続の変数すべてを自動的にエクスポートします。

-A

配列の代入。変数 vname の設定を解除し、arg リストから順々に値を代入します。+A を使用すると、最初に変数 vname の設定解除は行いません。

-b

バックグラウンドジョブの状態が変更されたときに、次のプロンプトを待機せずに、すぐにジョブ完了メッセージを出力します。

-B

中括弧パターンフィールドの生成を有効にします。これはデフォルトの動作です。

-C

シェルのリダイレクト (>) によって既存のファイルが上書きされるのを防ぎます。作成されたファイルは、O_EXCL モードで開かれます。これが有効なときにファイルを切り捨てるには、>| が必要です。

-e

コマンドの終了ステータスが 0 でない場合、ERR トラップ (設定されていれば) を実行し、終了します。このモードは、プロファイル読み取り時は無効です。

-f

ファイル名を生成しないようにします。

-G

ファイル名生成に使用した場合に、パターン ** 単独で、ファイルおよび 0 個以上のディレクトリおよびサブディレクトリに一致します。/ を続けると、ディレクトリおよびサブディレクトリだけが一致します。

-h

各コマンドは、最初に検出された時点で、検索済み別名になります。

-k

廃止。コマンド名に先行するものだけでなく、すべての変数代入引数をコマンドの環境に格納します。

-m

バックグラウンドジョブを個別のプロセスグループで実行し、完了時にメッセージを 1 行表示します。バックグラウンドジョブの終了ステータスは 完了メッセージで報告されます。ジョブ制御を備えたシステムでは、このオプションは対話型シェルに対して自動的に有効になります。

-n

コマンドを読み取り、構文エラーがないかチェックします。実行は行いません。対話型シェルに対しては無視されます。

-o

オプション名が指定されていない場合、オプションとその現在の設定のリストが、標準出力に書き込まれます。+ を付けて呼び出された場合、シェルに再入力して設定を復元できる形式で、オプションが書き込まれます。このオプションを繰り返して、複数のオプションを有効または無効にすることができます。

このフラグのあとに指定する引数は、次のいずれかのオプション名です。

allexport

-a と同じです。

bgnice

バックグラウンドジョブをすべて低い優先度で実行します。これはデフォルトモードです。

braceexpand

-B と同じです。

emacs

コマンド入力用に、emacs 形式のインラインエディタを起動します。

errexit

-e と同じです。

globstar

-G と同じです。

gmacs

コマンド入力用に、gmacs 形式のインラインエディタを起動します。

ignoreeof

ファイルの終わりを検出してもシェルは終了しません。終了させるには exit コマンドを使用する必要があります。

keyword

-k と同じです。

markdirs

ファイル名生成によって生成されるディレクトリ名には、すべて最後に / を付加します。

monitor

-m と同じです。

multiline

組み込みエディタで、行の長さが画面の幅を超える場合に複数の行を使用します。これはすべての端末で機能するわけではありません。

noclobber

-C と同じです。

noexec

-n と同じです。

noglob

-f と同じです。

nolog

履歴ファイルに関数定義を保存しません。

notify

-b と同じです。

nounset

-u と同じです。

pipefail

パイプラインのすべてのコンポーネントが完了するまで、パイプラインは完了しません。戻り値は、最後に失敗した 0 以外のコマンドの値か、コマンドが失敗しなかった場合は 0 です。

privileged

-p と同じです。

showme

有効にした場合、セミコロン (;) が前に付いた単純コマンドまたはパイプラインは、xtrace オプションが有効になっている場合と同様に表示されますが、実行されません。それ以外の場合、前に付いた ; は無視されます。

trackall

-h と同じです。

verbose

-v と同じです。

vi

vi 形式のインラインエディタの挿入モードになり、033 というエスケープ文字を押すまで継続されます。これにより制御モードになります。Return で行を送信します。

viraw

各文字を vi モードで入力されたときと同様に処理します。

xtrace

-x と同じです。

オプション名を指定しないと、現在のオプション設定を表示します。

-p

$HOME/.profile ファイルを処理しないようにし、ENV ファイルの代わりに /etc/suid_profile ファイルを使用します。このモードは、実効ユーザー ID (実効グループ ID) が実ユーザー ID (実グループ ID) と等しくないときには必ず有効になります。このモードを無効にすると、実効ユーザー ID が実ユーザー ID に、実効グループ ID が実グループ ID にそれぞれ設定されます。

-r

制限付きシェルを有効にします。このオプションは、一度設定すると設定解除できません。

-s

定位置パラメータを辞書編集方式の順にソートします。

-t

廃止。1 つのコマンドを読み取り、実行し、終了します。

-u

置換を行う際に、設定されていないパラメータをエラーとして扱います。

-v

シェルへの入力行の読み取り時に、その内容を表示出力します。

-x

コマンドおよび引数の実行時に、その内容を表示出力します。

--

どのオプションも変更しません。これは、$1- で始まる値に設定する際に便利です。このオプションのあとに引数がない場合、定位置パラメータが設定解除されます。

廃止された機能として、最初の arg が - である場合は、-x および -v オプションが無効になり、次の arg が最初の引数として扱われます。- の代わりに + を使用すると、これらのオプションは無効になります。これらのオプションはシェル起動時にも使用できます。現在のオプションセットは、$- で見つけられます。-A が指定されていないかぎり、残りの引数は定位置パラメータであり、$1 $2 .... に順に割り当てられます。引数が指定されていない場合は、すべての変数の名前と値が標準出力に出力されます。

+shift [n]

$n+1 ... からの定位置パラメータの名前は、$1 ... に変更されます。デフォルトの n1 です。パラメータ n に指定できる値は、評価結果が $# 以下の負でない数になる算術式です。

+trap -p [action] [sig] ...

-p オプションを指定すると、引数として指定された、各トラップに関連付けられているトラップアクションが、適切にクォートされて出力されます。それ以外の場合は、action は、シェルがシグナル sig を受け取ったときに、eval への引数である場合と同様に処理されます。各 sig は、数値またはシグナルの名前です。trap コマンドは、シグナル番号の順序で実行されます。現在のシェルへの入力時に無視されたシグナルにトラップを設定しようとしても無効となります。action を省略して、最初の sig が数値である場合、または action- である場合は、各 sig 用のトラップが元の値に再設定されます。action が NULL 文字列の場合、シェルおよびシェルが呼び出したコマンドは、このシグナルを無視します。sigERR の場合は、コマンドが 0 以外の終了ステータスで終わると必ず action が実行されます。sigDEBUG の場合は、各コマンドの前に action が実行されます。action が実行されているとき、変数 .sh.command には現在のコマンド行の内容が含まれます。sig0 または EXIT であり、function name 構文で定義されたある関数の内部で trap 文が実行された場合、コマンド action は関数の完了後に実行されます。sig0 または EXIT であり、trap が関数の外側で設定されている場合、コマンド action はシェルの終了時に実行されます。sigKEYBD である場合、emacsgmacs、または vi モードのときにキーが読み取られると必ず、action が実行されます。引数なしの trap コマンドは、コマンドの一覧を各々が対応しているシグナル番号とともに表示します。

true

何も行わず、0 を返して終了します。while とともに使用すると無限ループになります。

++typeset [±AHflabnprtux ] [ ±EFLRZi[n] ] [ vname[=value ] ]

シェル変数と関数の属性と値を設定します。function name 構文で定義された関数内部で呼び出されると、変数 vname の新しいインスタンスが作成され、関数の完了時に変数の値と型が復元されます。

- の代わりに + を使用すると、これらのオプションは無効になります。vname 引数が指定されていない場合、変数の vname (および必要な場合は value) のリストが出力されます。- の代わりに + を使用すると、値は出力されません。-p オプションを指定すると、オプションの名前ではなく typeset とオプション文字が、それぞれの名前の前に出力されます。-p 以外のオプションを指定した場合は、指定されたすべてのオプションを持つ変数だけが出力されます。それ以外の場合、vname および属性を持つすべての変数の attributes が出力されます。

このコマンドには、次の属性を指定できます。

-a

vname をインデックス付き配列として宣言します。複合変数の代入を除き、これは省略可能です。

-A

vname を連想配列として宣言します。添字は、算術式ではなく文字列です。

-b

変数には、何バイトのデータでも保持できます。データはテキストにすることもバイナリにすることもできます。値は、データの base64 エンコーディングによって表されます。-Z も指定した場合、バッファー内のデータのサイズ (バイト数) は、-Z に関連付けられたサイズで決められます。代入された base64 文字列がこのデータサイズを超えた場合、切り捨てられます。それ以外の場合は、値が 0 であるバイトが入力されます。データの base64 エンコーディングではなく、このバッファー内の実際のデータを出力するには、printf の書式である %B を使用できます。

-E

vname を倍精度浮動小数点数として宣言します。n0 以外の場合、vname の展開時に使用される有効数字の桁数を定義します。それ以外の場合は、10 桁の有効数字が使用されます。

-f

名前は、変数名ではなく関数名を指します。割り当てを実行することはできず、ほかの有効なオプションは -t-u、および -x だけです。-t オプションは、この機能の実行トレースを有効にします。-u フラグは、この関数に「未定義」を示すマークを付けます。関数が参照されると、関数定義を見つけるために FPATH 変数が検索されます。-f 以外のオプションを指定しない場合は、関数定義が標準出力上に表示されます。+f を指定した場合、関数名のあとに、この関数が定義されたファイル (ある場合) の行番号とパス名を示したシェルコメントが記された行が表示されます。

-f では、-i 属性を指定できません。

-F

vname を倍精度浮動小数点数として宣言します。n0 以外の場合、vname の展開時に使用される小数点以下の位数を定義します。それ以外の場合は、小数点以下 10 位が使用されます。

-H

このオプションは、UNIX 以外のマシン上で、UNIX とホスト名ファイルとのマッピング情報を提供します。

-i

vname を内部で整数を表す値として宣言します。代入の右側は、整数に代入する場合、算術式として評価されます。n0 以外であればその値を底として定義します。0 の場合、出力の底は 10 です。

-i 属性は、-R-L-Z、または -f と同時に指定できません。

-l

大文字をすべて小文字に変換します。大文字オプションの -u は無効になります。

-L

左詰めを行い、先行する空白文字を value から取り除きます。n は、0 以外であればフィールドの幅を定義します。0 の場合、フィールドの幅は最初に代入される値の幅で決定されます。変数に値を代入したとき、フィールド幅より短ければ右側にブランクが詰められ、長ければ切り捨てられます。-R オプションは無効になります。

-L では、-i 属性を指定できません。

-n

変数 vname の値で名前が定義されている変数への参照として、vname を宣言します。これは通常、名前が引数として渡された関数内部の変数を参照するために使用されます。

-R

右詰めを行い、先行する空白文字を挿入します。n は、0 以外であればフィールドの幅を定義します。0 の場合、フィールドの幅は最初に代入される値の幅で決定されます。変数に値を代入したとき、フィールド幅より短ければ左側にブランクが詰められ、長ければ終端が切り捨てられます。-L オプションは無効になります。

-R では、-i 属性を指定できません。

-r

指定された vname は読み取り専用としてマークされ、これらの名前は、以降の代入で変更できなくなります。

-t

変数にタグを付けます。タグはユーザーが定義可能で、シェルに対して特別の意味を持ちません。

-u

小文字をすべて大文字に変換します。小文字オプションの -l は無効になります。

-x

指定された vname に対し、あとで実行されるコマンドの環境へ自動的にエクスポートされるようにマークを付けます。名前に . が含まれる変数は、エクスポートできません。

-Z

最初の、空白文字でない文字が数字で、かつ -L オプションが設定されていない場合、右詰めを行い先頭に 0 を詰めます。-L オプションも設定されている場合は、先頭の 0 を削除します。n は、0 以外であればフィールドの幅を定義します。0 の場合、フィールドの幅は最初に代入される値の幅で決定されます。

-Z では、-i 属性を指定できません。

ulimit [-HSacdfmnpstv] [ limit]

リソース制限値を設定または表示します。システムによっては、次に挙げたすべての資源の制限をサポートしていないこともあります。limit を指定すると、指定したリソースの制限値が設定されます。limit の値は、各リソースに指定された単位の数値、または unlimited という値です。複数のリソースを指定すると、値の前に制限するリソース名と単位とが表示されます。

オプションをすべて省略すると、-f が指定されたものとみなします。

次に、使用可能なリソース制限値を示します。

-a

現在のリソース制限値をすべて表示します。

-c

コアダンプのサイズをブロック (512 バイト) 単位で表します。

-d

データ領域のサイズを K バイト単位で表します。

-f

現在のプロセスまたは子プロセスが書き込めるファイルのサイズをブロック (512 バイト) 単位で表します。読み込むファイルのサイズに制限はありません。

-H

指定したリソースに対して強い制限値を設定します。

強い制限値は、いったん設定したらあとで値を上げることはできません。

-H-S も省略すると、指定した制限値が強い制限と弱い制限の両方に適用されます。limit 引数を省略すると、現在のリソース制限値が表示されます。このとき、-H が指定された場合を除き、表示されるのは弱い制限値です。

-m

物理メモリーのサイズを K バイト単位で表します。

-n

ファイル記述子数に 1 を加えた値を表します。

-p

パイプバッファリングのブロック (512 バイト) の数を表します。

-s

スタック領域のサイズを K バイト単位で表します。

-S

指定したリソースに対して弱い制限値を設定します。

弱い制限値は、強い制限値を超えない範囲で値を上げることが可能です。

-H-S も省略すると、指定した制限値が強い制限と弱い制限の両方に適用されます。limit 引数を省略すると、現在のリソース制限値が表示されます。このとき、-H が指定された場合を除き、表示されるのは弱い制限値です。

-t

各プロセスが CPU を使用する秒数を表します。

-v

仮想記憶のサイズを K バイト単位で表します。

umask [-S][mask]

ユーザーファイルの作成時のマスクを mask 引数が示す値に設定します。mask には、chmod(1) で説明する記号値または 8 進数を指定できます。

記号値を指定すると、新しい umask 値は、mask を直前の umask 値の補数に適用した結果の補数になります。mask 引数を省略すると、マスクの現在の値を表示します。-S オプションを指定すると、モードは記号値として出力されます。それ以外の場合は、マスクは 8 進数で出力されます。

umask(2) を参照してください。

+unalias [-a] name

name のリストで指定された別名を別名リストから削除します。-a オプションを指定すると、すべての別名が設定解除されます。

+unset [-fnv] vname

vname のリストで指定された変数の設定を解除します。つまり、それらの変数の値と属性を消去します。読み取り専用の変数は設定を解除できません。-f オプションが設定されていると、名前は関数名を表します。-v オプションが設定されていると、名前は変数名を指します。-f オプションは -v をオーバーライドします。-n が設定され、name が名前参照である場合、name が参照する変数ではなく、name の設定が解除されます。デフォルトは -v です。LINENOMAILCHECKOPTARGOPTINDRANDOMSECONDSTMOUT、および _ の設定を解除すると、これらの変数の特殊な意味が削除されます。あとでこれらの変数に値を代入しても、特殊な意味はないままです。

wait [job]

指定されたジョブの終了を待ち、その終了ステータスを報告します。job を指定しないと、現在実行中のすべての子プロセスを待ちます。このコマンドの終了ステータスは、job を指定した場合は、待機する対象の最後のプロセスの終了ステータスです。それ以外は 0 になります。job の記述形式については、「ジョブ」を参照してください。

whence [-afpv] name ...

name ごとに、コマンド名として使用される場合に どのように解釈されるかを指示します。-v オプションを指定すると、より詳細に表示されます。-f オプションを指定すると、関数を検索しません。-p オプションを指定すると、コマンド名が別名、関数、または予約語である場合でも name のパスが検索されます。-a オプションは、-v オプションと似ていますが、指定した名前の解釈がすべて報告される点が異なります。

呼び出し

シェルを exec(2) で呼び出し、0 番目の引数 ($0) の最初の文字が - である場合は、シェルをログインシェルとみなし、/etc/profile からコマンドを読み取ります。次に、現在のディレクトリ内に .profile が存在するか、または $HOME/.profile がある場合は、そのいずれかのファイルからコマンドを読み取ります。次に、対話型シェルの場合、コマンドは最初に /etc/ksh.kshrc から読み取られ、続いて環境変数 ENV の値に対してパラメータ展開、コマンド置換、および算術置換を実行することによって指定された名前のファイルが存在する場合はこのファイルから読み取られます。-s オプションが存在せず、arg と、arg の名前のファイルが存在する場合、このスクリプトを読み取って実行します。それ以外の場合は、最初の arg/ が含まれなければ、最初の arg に対してパス検索を実行し、実行するスクリプトの名前を判定します。arg が示すスクリプトには実行権が必要で、setuidsetgid の設定は無視されます。パス上でスクリプトが見つからない場合、arg は組み込みコマンドまたは組み込み関数の名前を示しているものとして処理されます。

続いてコマンドが記述に従って読み取られ、次のオプションがシェルの起動時にシェルによって解釈されます。

-c

-c オプションを指定すると、最初の arg からコマンドを読み取ります。残りの引数は、0 で始まる定位置パラメータになります。

-D

$ が前に付いた二重引用符で囲まれている文字列の一覧が標準出力に出力され、シェルが終了します。この文字列セットは、ロケールが C や POSIX でない場合、各国語への変換の対象になります。コマンドは実行されません。

-i

-i オプションが指定された場合、またはシェル入出力が端末に接続されている場合 (tcgetattr(3C) を参照)、このシェルは対話型になります。この場合、kill 0 が対話型シェルを終了しないように TERM を無視し、wait が割り込み可能になるように INTR を捕らえ、無視します。いずれの場合も、シェルは QUIT を無視します。

-R filename

-R filename オプションは、別のユーティリティーで変数およびコマンドの定義および参照の検索に使用できる相互参照データベースを生成するために使用されます。

-r

-r オプションを指定すると、シェルは制限付きシェルになります。

-s

-s オプションが存在する場合、または引数が残っていない場合は、標準入力からコマンドを読み取ります。「特殊コマンド」に記述されているコマンドの出力を除くシェル出力は、ファイル記述子 2 に書き込まれます。

ほかのオプションと引数については、set コマンドの箇所で説明されています。最初の引数としての省略可能な - は無視されます。

rksh のみ

rksh は、標準シェルより機能が制限されたログイン名や実行環境を設定するために使用します。

rksh の機能は、次の動作ができない点を除いて ksh と同じです。

これらの制限は、.profile ファイルと ENV ファイルの解釈後に有効となります。

実行するコマンドがシェル手続きである場合、rkshksh を呼び出してコマンドを実行します。したがって、利用できるコマンドの種類には制限がありますが、一般ユーザーは標準シェルの全機能を利用できるシェル手続きを使用できます。この方式では、一般ユーザーが同じディレクトリにおいて書き込み権と実行権を持っていないことを想定しています。これらの規則の実際の効果は、.profile の作成者が確実な設定処理を実行してユーザーを適切な (おそらく、ログインディレクトリ以外の) ディレクトリに置くことにより、ユーザーの動作を完全に制御できるという点にあります。システム管理者は、多くの場合、rksh で安全に起動できるコマンドのディレクトリ (たとえば、/usr/rbin) を設定します。

使用法

ファイルが 2G バイト (231 バイト) 以上ある場合の kshrksh の動作については、largefile(5) を参照してください。

終了ステータス

次の終了ステータスが返されます。

0 以外

シェルで、構文エラーなどのエラーを検出したときに、0 以外を返します。

シェルを非対話型で使用している場合、シェルファイルの実行は中止されます。ただし、エラーがサブシェル内部で発生した場合は、サブシェルが中止されます。

最後に実行されたコマンドの終了ステータス

最後に実行されたコマンドの終了ステータスを返します。

シェルが検出する実行時エラーは、コマンド名または関数名、およびエラー状態を表示することによって報告されます。エラーが発生した行の番号が 1 より大きい場合は、コマンド名または関数名のあとに角括弧 ([]) で囲んだ行番号も表示します。

詳細は、ksh exit コマンドを参照してください。

ファイル

/etc/profile

システム初期化ファイル。ログインシェルに対して実行されます。

/etc/ksh.kshrc

システム全体の起動ファイル。対話型シェルに対して実行されます。

$HOME/.profile

個人用初期化ファイル。/etc/profile のあとでログインシェルに対して実行されます。

$HOME/.kshrc

デフォルトの個人用初期化ファイル。ENV が設定されていない場合、対話型シェルに対して /etc/ksh.kshrc のあとで実行されます。

/etc/suid-profile

代替初期化ファイル。実ユーザー (グループ) ID と実効ユーザー (グループ) ID が一致しない場合、個人用初期化ファイルの代わりに実行されます。

/dev/null

NULL デバイス。

著者

David Korn、dgk@research.att.com

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
shell/ksh
インタフェースの安定性
下記を参照。

スクリプト型インタフェースは「不確実」です。環境変数、.paths 機能、および編集モードは「流動的」です。

関連項目

cat(1), cd(1), chmod(1), cut(1), date(1), egrep(1), echo(1), egrep(1), env(1), fgrep(1), grep(1), login(1), newgrp(1), paste(1), printf(1), shell_builtins(1), stty(1), test(1), umask(1), vi(1), dup(2), exec(2), fork(2), ioctl(2), lseek(2), pathconf(2), pipe(2), sysconf(3C), ulimit(2), umask(2), rand(3C), tcgetattr(3C), wait(3C), a.out(4), profile(4), attributes(5), environ(5), largefile(5), standards(5)

The New KornShell Command and Programming Language』、Bolsky, Morris I.、Korn, David G. 共著、PrenticeHall 発行、1995 年

POSIX-Part 2: Shell and Utilities, IEEE Std 1003.2-1992, ISO/IEC 9945-2』、IEEE、1993 年。

注意事項

ksh スクリプトは、将来の ksh への拡張との衝突を避けるため、ISO C99、C++、および JAVA 言語の予約キーワードで使用される名前空間外でシェル関数名を選択するようにしてください。

あるコマンドを実行し、そのあとで同一名のコマンドが、検索パスにおいて元のコマンドがあるディレクトリの前に位置するディレクトリにインストールされた場合、シェルは元のコマンドの方を実行し続けます。新しい方のコマンドを実行するには、alias コマンドの -t オプションを使用してください。

非常に古いシェルスクリプトの中には、パイプ文字 (|) の同義語としてキャレット (^) を使用するものがあります。

複合コマンドの中に hist 組み込みコマンドを指定すると、すべてのコマンドが履歴ファイルから削除されます。

.file という組み込みコマンドは、コマンドの実行前にファイル全体を読み取ります。ファイル内の alias コマンドと unalias コマンドは、ファイル内に定義されたどのコマンドにも適用されません。

ジョブがフォアグラウンドプロセスを待っている間は、トラップは処理されません。このため、CHLD に対するトラップはフォアグラウンドジョブが終了するまで実行されません。

コンマが一部のロケールで小数点と解釈されないようにするために、算術式では、コンマ演算子のあとにスペース文字を残しておくことをお勧めします。

ほかのオペレーティングシステムに移植可能な .paths ファイルの作成には、いくつかの制限がある可能性があります。

システムが 64 ビットの命令セットをサポートしている場合、/bin/ksh は 64 ビットバージョンの ksh を実行します。