POSIX1日1コマンド[part11]: c99
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
c99
とりあえず使ってみる
[vagrant@localhost 011]$ c99 -bash: c99: command not found
コマンドが見つかりません。
yumでインストールしてみよう
[vagrant@localhost 011]$ sudo yum install c99 Failed to set locale, defaulting to C Loaded plugins: fastestmirror Determining fastest mirrors * base: ftp.riken.jp * extras: ftp.riken.jp * updates: ftp.riken.jp base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/4): base/7/x86_64/group_gz | 166 kB 00:00:00 (2/4): extras/7/x86_64/primary_db | 187 kB 00:00:00 (3/4): updates/7/x86_64/primary_db | 5.2 MB 00:00:01 (4/4): base/7/x86_64/primary_db | 5.9 MB 00:00:02 No package c99 available. Error: Nothing to do
というわけでc99を使えるようにするところから書きます。
c99を使えるようにする
そもc99とは
C99は、ISOで定められたC言語の規格である。正式な規格名は ISO/IEC 9899:1999。 ANSIの標準化プロセス(C89)のあと、C言語仕様はC++が標準化の取り組みによって進化しているのと比べて停滞していた。1995年には標準追補を作成したが、これはC89への細かい修正および国際文字集合対応の追加であった。1990年代の後半にいくつかの訂正を経て、ISO/IEC 9899:1999 として1999年に発行した。この標準は"C99"と呼ばれ、ANSI標準としても2000年5月に受理。国際的なC標準は作業部会ISO/IEC JTC1/SC22/WG14で保守している。
C言語の規格のようですね。
インストールする
gccに含まれているようです。
ですのでgccをpackage managerでインストールします。
$ sudo yum install gcc
$ sudo apt install gcc
$ c99 gcc: fatal error: no input files compilation terminated.
c99コマンドが実行できるようになりました。
c99を使う
ざっくり使い方
C言語はわからないのでインターネットでしらべたHello Worldを準備します。
$ vim hello.c
#include <stdio.h> int main(int argc, char *args[]) { printf("Hello, world!\n"); return 0; }
$ c99 hello.c $ ./a.out Hello, world!
アウトプットファイルの名前を指定
$ c99 -o hello hello.c $ ls a.out hello hello.c $ ./hello Hello, world!
ざっくりDESCRIPTION (翻訳)
Cプログラムをコンパイルする。
c99ユーティリティは、標準Cコンパイルシステムへのインタフェースである。
ISO C標準に準拠したソースコードを受け入れなければならない。システム概念的には、「コンパイラ」と「リンクエディタ」で構成されている。
[pathname] オペランドと[-l option-arguments] で参照される入力ファイルはコンパイルとリンクが行われ、実行可能ファイルが生成されます。
(リンクが完全にc99のオペレーション内で完全に起こるかは不特定です。一部の実装では、ファイルが実行されるまで完全には解決されないオブジェクトが生成されることがあります。)
[-c] オプションを指定すると、.cのフォームファイルのすべての [pathname] オペランドに対して、ファイルは次のようになります。
$(basename pathname .c).o
コンパイルが成功した結果として作成されるものとします。-cオプションが指定されていない場合、.cファイルオペランドに対してこのような.oファイルが作成されるか削除されるかは不定です。
リンクの編集を妨げるオプション(-cや-Eなど)がなく、すべての入力ファイルがエラーなしでコンパイルおよびリンクされた場合、結果の実行可能ファイルは [-o outfile] オプション(存在する場合)またはファイル [a.out] に書き込まれます。
実行可能ファイルは、ファイルの読み取り、書き込み、および作成で指定されているとおりに作成されますが、ファイルのパーミッションビットは次のように設定されます:S_IRWXO | S_IRWXG | S_IRWXU
プロセスの umask で指定されたビットはクリアされます。
ざっくりOPTION
C言語の知識がないのでオプションをざっくりキーワードだけ載せます。
- -c
- C言語の#defineディレクティブのように名前を定義します。
- -D name[=value]
- -E
- -g
- オブジェクトまたは実行可能ファイルに記号情報を生成する。
- -I directory
- -L directory
- -l library
- liblibrary.aという名前のライブラリを検索します。
- -O optlevel
- コード最適化のレベルを指定します。
- -o outfile
- 生成された実行可能ファイルには、デフォルトのa.outの代わりにパス名のoutfileを使用します。
- -s
- POSIX.1-2017のSystem Interfacesボリュームで定義されているexecファミリを使用して適切な実行に必要ないシンボリックおよび他の情報が削除(削除)されたオブジェクトまたは実行可能ファイル、またはその両方を生成する。
- -U name
- 名前の初期定義を削除します。
ざっくりまとめ
コンパイラの知識がない人からしたらc99は流石にコマンド名からどういう動作をするのか分からないのではないでしょうか。
私はC言語を使ったことがない + コンパイルとかをよく知らないのでこの程度のことしかかけませんでした。
gccは GNUコンパイラコレクションですね。c99はc言語の規格なので様々な規格のコンパイラがgccには入っているのでしょうね。
久しぶりにブログ投稿しようと思ったらポエム書いてた。
こんにちは。
久しぶりのブログ投稿です。
ポエムと戯言です。
「さぁPOSIXを始めよう」というブログ投稿を始めてから、約半年が過ぎようとしています。
2月18日からこの投稿を始めました。そして現在は8月22日
$ expr \( `date --date "20180822" +%s` - `date --date "20180218" +%s` \) / 86400 185
185日経っています。
そして、POSIXコマンドの数が、
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/zcat.html#tag_20_160 (アルファベット順の最後のコマンド「zcat」) が160個
そして投稿した数が「9」記事
あれ?おかしいぞ185日あったのに、残り151コマンドもやってないぞ。
結論
1日1つの記事を書くのはしんどいです。
何が言いたいのか。
ブログ投稿は義務でやっているわけじゃないので途中でやめても死にません。
だから好きなタイミングで投稿してしまいます。
1日1記事を書くという自分へのプレッシャーが毎日投稿をやめる理由になりました。
というのを盾に飽き性を守っています。
人間は自分を守る生き物です。ガーディアンです。セルフガーディアンです。
ストイックな人はガーディアンを説得しているのでしょう。
何かしらの対策をとってガーディアンに守るのをやめさせるのか。
それは、できませんでした。
できる方法がわかる人教えください。
じゃあどうやってガーディアンがいる状況でアグレッシグなムーブを起こせるのか。
それは「ガーディアンに攻撃だと気づかれないこと」で解決すると考えました。
ここでいう攻撃は「努力」とか「我慢」とかです。
僕の好きなアイドルグループの歌の歌詞に
「好きな事は苦しくたって努力と感じないよ」
という言葉あります。(Dの純情)
じゃあ好きになれるのか?
好きになれる人はすでに好きなんだと思います。
好きにないないものの努力は「それなり」でいいのだと思います。
(好きなものは努力と感じないので、そもそも努力ではない)
ガーディアンに守らせつつ攻撃を与える
簡単に言うと、無理をしないことですね。
仕事から帰ってきて、家に帰って「努力」「我慢」をするのはつらいですよね。
家に着いたら好きな事したくなるんですよね。
好きな事すればいいんです。好きな事した時間の何パーセントかを努力にあてましょう。
そのパーセントの見極めは難しいです。
0%の人もいると思います。それは仕方ないです。いつかパーセントが上がる日がくるかもしれません。その日を待ちましょう。
最初は10%ぐらいから始めるといいと思います。
18時に家に帰ってきて0時に寝るとして、
6時間もあるので、
60 * 6 * 0.1 = 36min
1日36分努力すれば、人生の10%の時間を継続的に自身の成長に向けられているのです。
そして、36minという時間が少ないと感じたらパーセントをあげていけばいいんです。
なので、「努力」をしている時間を測るのをおすすめします。
自分がどれぐらいの時間(%)を努力に使っているのかを確認して無理の無いラインを見つけましょう。
それがある程度続けらえたら、それがあなたの
ガーディアンに攻撃だと気づかれない攻撃です。
最後に
POSIXの投稿を怠っていたので言い訳ポエムを書いてみました(笑)
POSIXの投稿は毎日じゃなくすが、続ける予定です。
今勉強していること、今後更新があるかもしれないことをリストとして出しておきます
この辺のブログを書いていきますので、興味あればみてください。
POSIX1日1コマンド[part10]: bg
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
bg
とりあえず使ってみる
- 事前準備
# カレントディレクトリのファイル確認 [vagrant@localhost 009]$ ls file1 file2 file3 # 一秒ごとにlsした結果をlogに追記し、一定時間後に中断する。 [vagrant@localhost 009]$ while true; do ls; sleep 1s; done >> log_1 [Ctrl + C] # ファイルの中身確認 [vagrant@localhost 009]$ cat log_1 file1 file2 file3 log file1 file2 file3 log file1 file2 file3 log file1 file2 file3 log file1 file2 file3 log file1 file2 file3 log
- jobを作る
# 1秒ごとにdateコマンドを実行 [vagrant@localhost 009]$ while true; do date; sleep 1s; done >> log_2 ^Z ([Ctrl + z]で一時停止しjobとして保持) [1]+ Stopped sleep 1s # 1秒ごとにlsコマンドを実行 [vagrant@localhost 009]$ while true; do ls; sleep 1s; done >> log_1 ^Z [Ctrl + z]で一時停止しjobとして保持) [2]+ Stopped sleep 1s
Ctrl+z-はSIGTSTPシグナルで、プロセスの一時停止を行うときに使う
- jobの確認
# jobの確認 [vagrant@localhost 009]$ jobs [1]- Stopped sleep 1s [2]+ Stopped sleep 1s
ふたつの停止しているjobがある。
- バックグラウンドで実行するようにする。
[vagrant@localhost 009]$ bg 1 [1]+ sleep 1s & [vagrant@localhost 009]$ jobs [1]- Done sleep 1s [2]+ Stopped sleep 1s
バックグラウンドで実行されたことがわかる。(だが、継続処理はされない。)
- 処理に時間がかかるもの
処理に時間がかかるものの場合どうか。 sleepで1000秒待ってみる。
[vagrant@localhost 009]$ sleep 1000 ^Z [vagrant@localhost 009]$ jobs [3]+ Stopped sleep 1000 [vagrant@localhost 009]$ bg 3 [3]+ sleep 1000 & [vagrant@localhost 009]$ jobs [3]+ Running sleep 1000 &
バックグラウンドで実行(Running)されていることがわかる。
bg を知る
ざっくり使い方
bc [-l] [file...]
ざっくりDESCRIPTION
バックグラウンドでジョブを実行する。ジョブ制御が有効な場合(set -mの説明を参照)、bgユーティリティはバックグラウンドジョブとして実行することで、現在の環境(Shell Execution Environmentを参照)から中断したジョブを再開します。 job_idで指定されたジョブがすでに実行中のバックグラウンドジョブである場合、bgユーティリティは何の効果もなく、正常終了します。 bgを使用してバックグラウンドにジョブを配置すると、そのプロセスIDがあたかも非同期リストとして開始されたかのように、現在のシェル実行環境でプロセスIDが「知られている」ようになります。非同期リストを参照してください。
ざっくりOPTION
なし
ざっくりOPERANDS
bg job_id
再開するジョブをバックグラウンドジョブとして指定します。 job_idオペランドが指定されていない場合、直前に中断されたジョブが使用されます。 job_idの形式は、XBDのJob Control Job IDに記述されています。
ざっくりまとめ
Linux/Unixを使っていると、プロセスはよく目にすると思います。ジョブはどうでしょうか?
処理に時間がかかっている場合、別のターミナルを開きがちです。(SSHで新しくつなぐ)
みなさんはどうでしょうか?
実際にジョブを使うかは置いておいて、別の機会にジョブについて詳しく調べてみたいと思います。 それでは。
POSIX1日1コマンド[part9]: bc
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
bc
とりあえず使ってみる
- bcコマンドのインストール
$ sudo yum install bc
- 実行
$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'.
処理が止まっているわけではない。計算式を待ち受けている。
試しに、1+1
を入力してみる。
$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1+1
すると、
$ bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 1+1 <Enter> 2
計算結果が表示される。
- 標準出力をパイプで渡す。
$ echo "1+1" | bc 2
式をパイプで渡すと計算結果が返ってくる。
ざっくり使い方
bc [-l] [file...]
bc を知る
ざっくりDESCRIPTION
任意精度の算術言語。任意の精度計算機を実現する。 与えられたファイルから入力を受け取り、標準入力から読み込みます。 bcへの標準入力と標準出力が端末にアタッチされている場合、bcの呼び出しは対話型であるとみなされ、以下のセクションで説明される動作上の制約を引き起こす。
ざっくりOPTION
- -l
- 数学関数を定義し、デフォルトのゼロの代わりにスケールを20に初期化する。詳しくは EXTENDED DESCRIPTION を参照してください。
ざっくりOPERANDS
bc [file]
bcプログラムステートメントを含むテキストファイルのパス名。すべてのファイルが読み込まれた後、bcは標準入力を読み込みます。 (入力ファイルは、読み込まれたときに実行される一連のコメント、文、および関数定義を含むテキストファイルでなければならない。)
ざっくりEXTENDED DESCRIPTION
このセクションの文法と次のセクションの字句規則は、一緒にbcプログラムの構文を記述します。このスタイルの文法の一般的な規則は、文法規則で説明されています。有効なプログラムは、文法の非終端記号プログラムとして表現することができます。この正式な構文は、テキスト構文の記述よりも優先されます。
EXTENDED DESCRIPTION 詳しくはこちら
ざっくりまとめ
計算できるということがわかりました。が、一朝一夕では習得できる内容じゃなさそうなので、「POSIX1日1コマンド」の中では深く触れれませんでした。
「詳しくはこちら」で済ましている部分はいずれ、"いずれ"習得したいものです。
使いこなせると、POSIXの範囲で複雑な計算ができるようになるので、是非習得したいものです。
POSIX1日1コマンド[part8]: batch
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
batch
とりあえず使ってみる
$ sudo systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2018-02-25 23:50:07 UTC; 22s ago Main PID: 3314 (atd) CGroup: /system.slice/atd.service └─3314 /usr/sbin/atd -f Feb 25 23:50:07 localhost.localdomain systemd[1]: Started Job spooling tools. Feb 25 23:50:07 localhost.localdomain systemd[1]: Starting Job spooling tools...
起動していなければ、
$ sudo systemctl start atd
・使う
# 事前のディレクトリ確認 $ ls jobs # jobの内容を表示 $ cat jobs echo `date` >> sample.log # batchコマンドに渡す $ cat jobs | batch job 22 at Mon Mar 5 19:03:00 2018 # 実行されている事がわかる $ ls jobs sample.log # コマンドの実行結果がsample.logに追記されている。 cat sample.log Mon Mar 5 19:03:23 UTC 2018
・複数回キューに追加してみる
# 複数回実行 $ cat jobs | batch job 33 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 34 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 35 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 36 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 37 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 38 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 39 at Mon Mar 5 19:12:00 2018 $ cat jobs | batch job 40 at Mon Mar 5 19:12:00 2018 # sample.logを確認 $ cat sample.log Mon Mar 5 19:05:53 UTC 2018
この時点では追加されてい無い事がわかる。
# キューの内容内容を確認 # bというキューにたくさんキューがたまっている $ atq 33 Mon Mar 5 19:12:00 2018 b vagrant 34 Mon Mar 5 19:12:00 2018 b vagrant 35 Mon Mar 5 19:12:00 2018 b vagrant 36 Mon Mar 5 19:12:00 2018 b vagrant 37 Mon Mar 5 19:12:00 2018 b vagrant 38 Mon Mar 5 19:12:00 2018 b vagrant 39 Mon Mar 5 19:12:00 2018 b vagrant 40 Mon Mar 5 19:12:00 2018 b vagrant # 少し時間を置く $ atq 35 Mon Mar 5 19:12:00 2018 b vagrant 36 Mon Mar 5 19:12:00 2018 b vagrant 37 Mon Mar 5 19:12:00 2018 b vagrant 38 Mon Mar 5 19:12:00 2018 b vagrant 39 Mon Mar 5 19:12:00 2018 b vagrant 40 Mon Mar 5 19:12:00 2018 b vagrant
少し時間がたってキューの中身が減っているのがわかる。
キュー内のコマンドが実行されたことを意味するので、sample.log
にも処理内容が追記されている。
$ cat sample.log Mon Mar 5 19:14:53 UTC 2018 Mon Mar 5 19:15:53 UTC 2018 Mon Mar 5 19:16:53 UTC 2018
batch を知る
ざっくり使い方
<command> | batch
ざっくりDESCRIPTION
バッチ・キュー内で実行されるコマンドをスケジュールする。
標準入力からコマンドを読み取り、バッチ・キュー内で実行するようにスケジュールします。それは以下のコマンドと同等です:
at -q b -m now
(atコマンドで 「b」というキュータスクを追加する。) ここで、キューbは特別なキュー、特にバッチ・ジョブ用です。バッチ・ジョブは、時間制約なしでバッチ・キューに提出され、バッチの呼び出しごとに異なる不特定の要因に基づいてアルゴリズムを使用してシステムによって実行されます。
実装定義のディレクトリにあるat.allow(/etc/at.allow)ファイルに名前が表示されている場合、ユーザはバッチを使用することが許可されます。そのファイルが存在しない場合、実装定義のディレクトリにあるat.deny(/etc/at.deny)ファイルをチェックして、ユーザがバッチへのアクセスを拒否されるかどうかを判断しなければなりません。いずれのファイルも存在しない場合、適切な特権を持つプロセスだけがジョブをサブミットすることが許されます。 at.denyだけが存在し、空である場合、グローバルな使用が許可されます。 at.allowファイルとat.denyファイルは、1行に1つのユーザー名で構成されます。
ざっくりOPTION
なし(batchコマンド自体にはなし)
ざっくりOPERANDS
なし(batchコマンド自体にはなし)
ざっくりまとめ
以前に使ってみた、atコマンド
の 「負荷が少ないときに処理を実行するバージョン」だそうです。
atコマンドをざっくりとしか使ってい無いため、使用感まではわかりませんでしたが、処理に時間がかかり、他の処理を優先させたい場合にbatch
を使うのは良いかもしれません。
また、
man batch
を実行すると、atコマンド
のmanが表示され、その中の一つの要素としてbatch
が存在します。
Go言語_初心者_環境作りからHello Worldまで
Go言語の勉強をそろそろはじめないと、社会の波に乗り遅れそうな気がしてきました。
初心者かつ、仕事であまりプログラミングをしない。
ので、効率よく勉強を進めれるか分かりませんが、とりあえず社会の波に揺られるぐらいにはなりたい。
そして、今回の記事は水辺に片足突っ込むための、
- 環境づくりからHello World
までです。
何から始めるか
Goの事をちょっと調べたら、とりあえず、A Tour of Go から始めようってなりますよね。
とりあえず、A Tour of Go
を写経するツアーに参加するのはいかがでしょうか?
私はそうすることにしたいと思います。
それと平行して、環境を用意したいと思います。
環境
自分の環境
- Vagrant
- CentOS7
- GO
- 1.9.4
手順
Goを使えるようにする
vim-goを使えるようにする。
Go本体
バイナリをダウンロード、適切なディレクトリに配置
Downloads - The Go Programming Language
このリンクのFeatured downloads
から対象マシン(私の場合はLinux)を右クリックしてリンクのアドレスを取得する。そしてインストールする。
curl -LO https://dl.google.com/go/go1.9.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.9.4.linux-amd64.tar.gz
.bash_profileにパスを通す記述を追記
echo "export PATH=$PATH:/usr/local/go/bin" > ~/.bash_profile source ~.bash_profile
$ go Go is a tool for managing Go source code. Usage: go command [arguments] The commands are: build compile packages and dependencies clean remove object files doc show documentation for package or symbol env print Go environment information bug start a bug report fix run go tool fix on packages fmt run gofmt on package sources generate generate Go files by processing source get download and install packages and dependencies install compile and install packages and dependencies list list packages run compile and run Go program test test packages tool run specified go tool version print Go version vet run go tool vet on packages Use "go help [command]" for more information about a command. ・ ・ ・
vim-goを使えるようにする。
Vim 8 for CentOS Linux 7 – Karanbir Singh :: Thinkability @karan.org
GitHub - fatih/vim-go: Go development plugin for Vim
これらを参考に、vim8 + vim-go使えるようにする。
$ sudo vim /etc/yum.repos.d/vim8.repo
[mcepl-vim8] name=Copr repo for vim8 owned by mcepl baseurl=https://copr-be.cloud.fedoraproject.org/results/mcepl/vim8/epel-7-$basearch/ type=rpm-md skip_if_unavailable=True gpgcheck=1 gpgkey=https://copr-be.cloud.fedoraproject.org/results/mcepl/vim8/pubkey.gpg repo_gpgcheck=0 enabled=1 enabled_metadata=1
:qw
vimを一度アンインストールし、またインストールする
- sudoが一度消えますが、またyumでインストールできます。
$ sudo yum remove vim-minimal-2:7.4.160-2.el7.x86_64 # sudoがないのでrootになる $ su $ yum install sudo $ sudo yum install vim
git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go
vim-goでつかうバイナリをダウンロード
$ vim
:GoInstallBinaries
これでダウンロードができるはずです。
Hello World
Goの「Hello World」書く
vim hello.go
package main import "fmt" func main() { fmt.Println("vim-go") }
vim-goがここまで勝手に書いてくれている。
package main import "fmt" func main() { fmt.Println("Hello World") }
実行
$ go run hello.go Hello World
$ ls hello.go $ go build hello.go $ ls hello hello.go ./hello Hello world
POSIX1日1コマンド[part7]: basename
詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。
basename
とりあえず使ってみる
$ ls a.txt $ basename a.txt a.txt # suffixを指定 $ basename a.txt .txt a
$ pwd /home/vagrant/shells/006 $ basename `pwd` 006
$ ps aux | grep chronyd chrony 556 0.0 0.3 115640 1776 ? S Feb25 0:00 /usr/sbin/chronyd vagrant 3805 0.0 0.1 12448 676 pts/0 R+ 04:05 0:00 grep --color=auto chronyd ps aux | grep chronyd $ ps aux | grep chronyd | awk '{ print $11 }' | head -n 1 /usr/sbin/chronyd $ basename $(ps aux | grep chronyd | awk '{ print $11 }' | head -n 1) chronyd
basename を知る
ざっくり使い方
basename string [suffix]
ざっくりDESCRIPTION
パス名のディレクトリじゃない部分を返す。文字列のオペランドは XBD pathname
で定義されているパス名として扱われる。
文字列は、文字列中の最後のパス名に対応するファイル名に変換され、その後に接尾辞文字列接尾辞があればそれを削除するものとする。これは、次のステップに相当するアクションを順番に実行することによって行われます。
- stringがヌル字列の場合、結果の文字列が '.'かどうかは不明です。もしくは、ヌル文字列です。いずれの場合も、手順2〜6はスキップしてください。
- stringが"//"の場合、ステップ3〜6がスキップされるか処理されるかどうかは、実装定義である。
- stringが全てスラッシュで構成されている場合、文字列は単一のスラッシュ文字に設定されます。この場合は、手順4〜6をスキップしてください。
- stringの最後にスラッシュがある場合、それらは削除される
- stringにスラッシュが残っている場合、文字列中の最後のスラッシュまでの文字列の接頭辞は削除されます。
- suffixスオペランドが存在し、stringに残っている文字と同一ではなく、stringに残っている文字のsuffixと同じである場合、接尾辞,suffixは文字列から削除されます。それ以外の場合、このステップでは文字列は変更されません。文字列に接尾辞が見つからない場合は、エラーとみなされません。
補足資料
ざっくりOPTION
なし
ざっくりOPERANDS
basename <string>
basename <suffix>
ざっくりまとめ
パスを渡すと最後パスの最後の部分を抜き出してくれる。
正直basenameをいつ使うのか思いつきません。
いっぱいパス処理しないといけなくて、かつ拡張子が不必要な場合とかに使えるだろうか。
== 活用方法募集中 ==