UNIX/コマンド/シェル・シェル組み込み/zsh
Table of Contents |
[ -f /bin/zsh ] && SHELL=/bin/zsh [ -f /bin/zsh ] && exec /bin/zsh -l
checking if tcsetpgrp() actually works... error~ configure: error: unexpected return status
./configure --enable-multibyte --prefix=
% hello="Hello, " % echo $hello Hello, % world="World\!" % echo $hello$world Hello, World! % printf "%s\n" $hello Hello, % print $world World! % echo "$hello" Hello, % echo '$world\n' $world % echo -n "$hello\n" Hello, %
% unset hello % echo $hello %
% hello=Hello % echo $hello Hello % zsh % echo $hello % hello="sub Hello" % echo $hello sub Hello % exit % echo $hello Hello %
% export shell_env="shell env val" % echo $shell_env shell env val % zsh % echo $shell_env shell env val % unset shell_env % echo $shell_env % exit % echo $shell_env shell env val
% arr=(aa "bb" 22 "44") % echo $arr[1] aa % echo $((arr[4]*2)) 88 % echo $#arr 4 $ echo $arr[*] aa bb 22 44 % echo $arr[2,4] bb 22 44 $ echo $arr[-2] 22 $ echo $arr[-2,4] 22 44 $ echo $arr[$#arr] 44
+ 、- 、* 、/ 、% (剰余)、++ (インクリメント)、-- (デクリメント)、** (冪乗) & (ビット単位の論理積)、| (ビット単位の論理和)、~ (ビット単位の論理否定)、^ (ビット単位の排他的論理和) ! (論理否定)、, (連続評価)、&& (論理積)、|| (論理和) < 、> 、<= 、>= 、!=、==
% echo $((11)) 11 % echo $((11!=3)) 1 % echo $((11==3)) 0 % n=5; echo $((n)) 5 %
% zmodload zsh/mathfunc % echo $((1/2)) 0 % echo $((1/2.0)) 0.5 % printf "%.3f\n" $((1/3.0)) 0.333 % printf "%.9f\n" $(( 4*atan(1) )) 3.141592654 % printf "%.9f\n" $(( log1p(1) )) 0.693147181
for name ... [ in word ... ] term do list done
% for i j in {1..7} ; do ; for% echo $i $j for% ; done 1 2 3 4 5 6 7
% ls tes1 tes2 tes3 % for file in * ; do ; for% echo $file for% ; done tes1 tes2 tes3 % for i; do ; for% echo 1 2 3 4 for% ; done %
% for file in * for% do for% echo $file for% done tes1 tes2 tes3
for (( [expr1] ; [expr2] ; [expr3] )) do list done
% for ((i = 0; i < 5; i++)); do ; for% echo $i for% ;done 0 1 2 3 4
if list_1 then list_2 [ elif list_3 then list_4 ] ... [ else list_n ] fi
% n=4 % if [ $n < 4 ] ; then ; then% echo $n then% ; fi zsh: no such file or directory: 4
% n=1 % if [ $n -lt 4 ] ; then ; then% echo $n then% ; fi 1
% mkdir testdir && cd !!:$ % touch file1 file2 && ls . .. file1 file2 % if [ -e file1 -a -e file2 ] ; then ; then% echo "true\n" then% ; else ; else% echo "false\n" else% ; fi true % if [ -e file1 -o -e file3 ] ; then ; then% echo "true\n" then% ; else ; else% echo "false\n" else% ; fi true % if [ -e file1 -a -e file3 ] ; then ; then% echo "true\n" then% ; else ; else% echo "false\n" else% ; fi false % if [ -e file1 -a ! -e file3 ] ; then ; then% echo "true\n" then% ; else ; else% echo "false\n" else% ; fi false
% zsh % n=2 % if [[ $n < 4 ]] ; then ; then% echo $n then% ; fi 2 % if [[ $n -lt 4 ]] ; then ; then% echo $n then% ; fi 2 % if [[ -e file1 && -e file2 ]] ; then ; then% echo "true\n" then% ; else ; else% echo "false\n" else% ; fi true % if [[ -e file1 || -e file3 ]] ; then ; then% echo "true\n" then% ; else ; else% echo "false\n" else% ; fi true % sh $ n=2 $ if [[ $number -le 4 ]] ; then > echo $n > fi sh: [[: not found $ if [ $number -le 4 ] ; then > echo $n > fi 2
#!/bin/zsh setopt prompt_subst if [[ $((RANDOM%2)) == 0 ]] ; then ; exit 0 ; else ; exit 1 ; fi
% n=4 % repeat 10; do ; repeat% if repeat if% if [[ $n -le 4 ]] ; then ; repeat if then% ./genExit.sh repeat if% ; fi repeat if% ; then ; repeat then% echo "exit 0" repeat then% ; else ; repeat else% echo "exit 1" repeat else% ; fi repeat ; done exit 0 exit 1 exit 1 exit 0 exit 1 exit 0 exit 0 exit 0 exit 1 exit 0
repeat word do list done
% repeat 10; do; repeat% echo -n "`date`\r" repeat% sleep 1 repeat% ; done
select name [ in word ... term ] do list done
% select number in {1..5} ; do ; select% if [[ 1 -le $number && $number -le 5]] ; then ; select then% echo $number select then% ; else ; select else% echo "無効な選択です" select else% ; fi ; select% done 1) 1 2) 2 3) 3 4) 4 5) 5 ?# 1 1 ?# 6 無効な選択です
sleep [number[smhd]...]
% for i {1..100}; do ; for% echo -n '\a' for% sleep $((60/100.0)) for% ; done
while list do list done
% echo {1..4} 1 2 3 4
yes [string...]
% yes e e e e^C
% for i in {1..9} ; do ; for% if [[ $((i%2)) == 0 ]] ; then; for then% echo $i for then% ; fi for% ; done 2 4 6 8
% <file1 >file2
% <file1 <file2 >file3 >file4 >file5
% autoload -U compinit % compinit
% autolaod -U tetris % zle -N tetirs % ESC-x execute: tetirs
-U エイリアス展開をしません。 -X 関数名を指定せずに関数の中で使われます。関数の定義を同じ名前のオートロードの関数で上書きします。 +X 指定された関数が未定義の時にのみ読み込みます。unfunction コマンドとともに使われることがあります。 -k ksh 風の autoload です。 -t デバッグ時のトレース。 -w 関数がすでにコンパイル済みの時に使います。 -z zsh 風の autolaod です。
% ~/dir1/dir2/bin % ~root/bin % /
Completing directory stack 0 -- /home/student/sxxxxxxx/dir1/dir2/bin 1 -- /root/bin 2 -- /
size -- List section sizes and total size. spline -- Interpolate between points in datasets. strings -- List printable strings from files. strip -- Discard symbols.
zsh: you have running jobs.
zsh: warning: X jobs SIGHUPed
% gedit & % thunderbird & % firefox & % file-roller &| % acroread &! % jobs [1] running gedit [2] - running tunderbird [3] + running firefox
% jobs [1] running gedit [2] - running tunderbird [3] + running firefox % disown %firefox % jobs [1] - running gedit [2] + running tunderbird % disown %[<tab>] Completing job %1 -- gedit %2 -- thunderbird
% %thunderbird &! % %1 &| % jobs %
-d ジョブを起動したときのディレクトリの出力 -l プロセス ID の出力 -p プロセスグループのプロセス ID を出力 -r running のジョブのみの出力 -s stopped のジョブのみ
% whatis ESC-h whatis is /usr/bin/whatis ...(マニュアルの内容)... % whatis
% ls -l drwxr-xr-x 3 s1170232 student 4.0K Feb 9 22:28 . drwxr-xr-x 68 s1170232 student 8.0K Feb 9 22:34 .. drwxr-xr-x 2 s1170232 student 4.0K Feb 9 22:26 dir1 -r-------- 1 s1170232 student 0 Feb 9 22:25 file1 --w------- 1 s1170232 student 0 Feb 9 22:25 file2 ---s------ 1 s1170232 student 0 Feb 9 22:25 file3 -rwx------ 1 s1170232 student 0 Feb 9 22:25 file4 lrwxrwxrwx 1 s1170232 student 22 Feb 9 22:28 link1 -> /home/student/s1170232 % ls -l {file*,link1}(f/u+r/,@) -r-------- 1 s1170232 student 0 Feb 9 22:25 file1 -rwx------ 1 s1170232 student 0 Feb 9 22:25 file4 lrwxrwxrwx 1 s1170232 student 22 Feb 9 22:28 link1 -> /home/student/s1170232 % rm {file*,link1}(r,s) % $ ls -l drwxr-xr-x 3 s1170232 student 4.0K Feb 9 22:51 . drwxr-xr-x 68 s1170232 student 8.0K Feb 9 22:51 .. drwxr-xr-x 2 s1170232 student 4.0K Feb 9 22:26 dir1 --w------- 1 s1170232 student 0 Feb 9 22:25 file2
(/) ディレクトリである (.) 通常ファイルである (@) シンボリックリンクである (*) 実行ファイルである (r) 属性に u+r がある (w) 属性に u+w がある (x) 属性に u+x がある (A) 属性に g+r がある (I) 属性に g+w がある (E) 属性に g+x がある (R) 属性に o+r がある (W) 属性に o+w がある (X) 属性に o+x がある (s) SetUID ビットが与えられている (S) SetGID ビットが与えられている (t) Sticky ビットが与えられている (f) 8進数とともに用いられる場合、f に続けて =、+、-、?を使います。 = では、指定された属性に一致するもの、+ はその属性があるもの、 - ではその属性がないもの、? はどの権限でもよい(例: (f+1?5))。 = のみ省略可能です(例: (f100))。 u+r 等で使われる場合、//内に書きます(例: (f/u+r,o-x/))。 (a-X) アクセス日時が X 日前より後である a と -X の間に、s をつけると X 秒、m をつけると X 分、h をつけると X 時間、 w をつけると X 週間、M をつけると X ヶ月になります。 (a+X) アクセス日時が X 日前より過去である a と +X の間には、-X の時と同じ文字が指定できる。 (m-X) 修正日時が X 日前より後である a と同様、+X もある。 (L-X) X バイト未満のファイル L と -X の間に k をつけるとキロバイト、m をつけるとメガバイトになります。 (L+X) X バイトより大きいファイル ◆ ^ に続いた修飾子は意味が反対になります。また、ターミナル上で a などと打つと 補完の一覧が出てくるので、そこでも確認しつつ入力が可能です。
% ./**/*(.{Lm+10,aM+1})