source another-file
${exitcmd}
こんなもん解析できるわけねー
>>950
何言ってるの? opengroupはシェル開発者がやろうと思っていることを
妨げないようにしているだけ
シェルスクリプトのコンパイルであればBourne Shellの開発者がやろうとしたことだし
Korn Shellにはずっと前からシェルスクリプトのコンパイラがある
お前の意見を押し付けるな
傲慢はお前だろ >>950
誰が望むんだって、それただのラベルを使ったループの脱出じゃん
そういった拡張シェルを作りたい人もいるだろうし
お前は、将来の目をつもうとしてるのか?
シェルが改良されたら困ることでもあるのか?
まああるんだろうな。
新しいシェルを勉強したくない > ちなみに俺はexitの後に>>"$0"でデバッグ中のログ取りしてる、別にログファイル作るのめんどいしバッファ再読み込みでエディタにすぐフィードバックが得られる
珍妙な事やってるな(笑)
>>951
単純にシェルスクリプトにシェルスクリプトとして解析できないものを埋め込んだら
コンパイルできないってだけだろ
頭固いよ(笑)
なんでシェルスクリプトのコンパイラは
どんなシェルスクリプトにも対応できなきゃ駄目だって
思っちゃうの?
【注意】以下のようなコードを書いたらコンパイルできません
って注意書きを書くだけでいいんだよ?
もっと柔軟な頭を作ろうね(笑) インタプリタを軽くした方が筋がいいと思うわ
dashもなだかんだでコマンドライン編集や規格に従いたくて対話機能落とせてないし
どうせスクリプティングにしか使われないんだから、規格なんて無視すればいいのにと思う
機能を削減したら互換性がなくなるだろ
規格準拠じゃなくて、互換性のためにやってる
>>950
vi編集モードの指定がやけに細かいな
dashはemacsもヒストリもサポートしてるしむしろ対話シェルとして十分使える方で、普段対話使いしてる人もまあ居るかも
シェルスクリプトエンジンとしては、ttyに見せかけてvi/emacs風キーバインドを送って間接的にコマンドバッファ弄ったり、ヒストリ検索活用するシェルスクリプトが多いなら互換性の為に要るけど、要るかね?
対話用途の人も少なからず居るだろうからdashとしては出せなくても、名前を変えてシェルスクリプトエンジンとしてもっと特化した版があれば嬉しい シェルスクリプトなんてコンパイルしたところで外部呼び出しだらけだし大して速くもならんでしょ
恩恵あるのはビルトインだけでループぐるぐる回すベンチくらい
>>960
> vi編集モードの指定がやけに細かいな
もしかしてPOSIXが仕様を決めたから
dashはその通りに作ってるとか思ってる?
vi編集モードとかemacsとか、それを最初にやったのはkshなの
dashやbashや他のシェルはそれを真似しただけ
POSIXはkshやdashやbashで移植性があるものを文書化しただけなの
> 対話用途の人も少なからず居るだろうからdashとしては出せなくても、
> 名前を変えてシェルスクリプトエンジンとしてもっと特化した版があれば嬉しい
自分で作ればいいじゃん?POSIXに準拠してないシェルを作ってもいいんだよ。
dashはPOSIXに準拠するという方針なだけ
機能を減らすことで何が嬉しいのか知らんけど/bin/shとしては使えなくなるだろうね。
別にbashをインストールしなきゃ対話的に使えないOSになってしまう >>961
×シェルスクリプトなんてコンパイルしたところで外部呼び出しだらけだし大して速くもならんでしょ
○外部呼び出しだらけのシェルスクリプトはコンパイルしたところで速くならない
他の言語のようにビルトインだけで作ればいいんだよ
作れるわけがない?
作れない理由を潰せば作れるよね?
シェルの将来としてそのようなシェルがあってもいい >>961
それを言ってはおしまいだけど、IFS決め打ちって文脈からパースについて楽できないかって話ね
しかし複合文は先読みでエラー出せることから分かるように、環境の更新や副作用起こす展開をしないループなら既に手抜きは可
長大なベタ書きならIFS決め打ちで結構削れるだろうが、そんなケチくさい努力に見合うとは思わない >>964
何の話してるの?
楽できる機能を搭載したシェル作ればいいだけじゃん? まああれだね
「POSIXが変なことを考えていて、コンパイラとかを作ろうとしてる」
と勘違いしているアホが居る
POSIXがどういうものかを理解していれば
「POSIXはコンパイラを作ろうとしているシェルがあることを知っていて
そういったシェルを将来作れるように考慮している」
が正しいとわかる
じゃあ後追いでええのにな。
様子や実装具合を見ながら。
どうせ普及せんのやろし。w
>>967
だから後追いじゃん?
POSIXが先に作ってる仕様なんてないぞ
どこにPOSIXがコンパイラの仕様を作ってる?
よーくみたまえよ 一部だけ認めるのでもまだ早い。
大半が実装してから共通項を整理するくらいでいい。
>>969
やっぱり理解が追いついてないか(苦笑)
1. シェルスクリプト用のコンパイラを作りました
2. この時点でPOSIX準拠になっていないといけない
3. 大半が実装してから共通項を整理する
大半が実装するまでの間、POSIX違反になっちゃいけないのよ
意味わかる?POSIX違反なコンパイラを作るな!って言われるでしょ
POSIXが正しいシェル間違ったシェルを決めるのは傲慢
POSIXは決まった以外ならどんなシェルでも許さなきゃいけない 訂正
POSIXは決まったこと以外であれば、どんなシェルでも許さなきゃいけない
「大半が実装するまでPOSIXでは認めない」
これが傲慢な考えだってわからないのは本当にヤバイよ
POSIXがルールになってるじゃん
「大半が実装しなくてもPOSIXはそれを禁止することはない」
>>950
例にしてもラベルの位置が先頭なのは思慮が足りなさすぎるな、予約語認識のセマンティクスとBNFに手を入れることになる
仮にねじ込むとすれば、inの部分で認識される
新予約語に続けてラベル名 for x of outerloop [in word+]
的な感じか
ofは適当だけど、既に予約されてて意味の通るトークンが流用できれば望ましい
>>973
それ例じゃないからw
あんたこれPOSIXの提案だって思ってるでしょ?
こんな事も考えられるってことでだけだよ
そんなことに突っ込んでも意味ない どういう文法にするかはシェルを作っている人たちが考えることであって
「POSIXは仕様を考えません」ってスタンスは明確になっている
まだ試してないけどfor x ofの時点でシンタックスエラー吐くのが普通だろうし、自由に選べるはず
C-style((..))のような拡張とも被らない
>>973
forに足すなら浮いてる終端記号
in : In
を拡張するのが確かにスマートなんだけど
言語全体で見るとwhile/untilに使えないのが不自然
for_clause : For name do_group
| For name sequential_sep do_group
| For name linebreak in sequential_sep do_group
| For name linebreak in wordlist sequential_sep do_group
;
while_clause : While compound_list do_group
;
until_clause : Until compound_list do_group
;
do_group : Do compound_list Done
;
do_groupに足したいところだが、compound_listが何でもアリだから曖昧になる、末尾:は非コマンド名と予約しても現状通るし、do : ; done すらイディオム、もちろん今のうちから予約しておくのは良い事
ただし意味論的にキモい事になる(label:がwhile行とズレる)
while ...
do label:
...
done
ので、ラベルのようなあっても無くても困らないものでなく、もっと重要な拡張の為に取っておくべき > もちろん今のうちから予約しておくのは良い事
勝手に予約しないでください
コマンドがファイルでありえる限りヌル文字と/以外なんでもありだし、本当に任意コマンドを受け取って呼ぶならcommand, type, envとかで全部問い合わせるか、クォートする必要があるな
ところで任意文字列のコマンドが既にダメなのは今更な事に気付いた、例えば
✗com=mand arg1 arg2…
✔\com=mand arg1 arg2...
これを流用して意味を為さない
=label
なんてどうかと思ったが、bash/dashはcommand not found返しやがる
不用心にパス区切へ使われがちな:はなるべく避けてるけど、名前空間の表現なんかでpkg:nameくらいは使いたい
末尾:という制限付きならまあ
とりあえずbashは関数も実行ファイルも普通に作れるしガン無視の模用、実効性は疑問
個々人が(覚えてたら)一応リスペクトしておくか、の積み重ねじゃね
>>983
=は他のコンテキストでクオートする必要がないところが特異
任意文字がダメなのはコントロールオペレータやメタ文字、予約語もそう
当たり前だから忘れがちだけど、空白>|($&cを含んだコマンドを呼ぶならクオートする >>983
面白い挙動見つけたな
名前を受け取ってevalし、空でなければ普通に環境設定、空ならデフォルト動作として=cmdが呼ばれるとか
色々遊べそう
禍根はこうして産まれるんだなって 一応opengroupのShell Command Languageには
The words that are recognized as variable assignments or redirections according to Shell Grammar Rules are saved for processing in steps 3 and 4.
と記載があるので、variable assignmentとして認識できないなら、コマンドとして検索すると間接的に示唆してるな
もちろん期待すべきではないが
名前が空になるのは大抵eval "$var=$val"のようなコードでのバリデーション不足だから、エラーにしてくれれば親切なのに
残念
挙動は揃ってるっぽいな
こんな時の為の明示的なunspecified
汚いから連想配列使えって?標準を示してくれればな
親切にエラーを投げても構わないよ、って意図はしばしば察せられるね
正直とても分かりにくいが
変数はダメ文字多いけど、頑張るならx$VARとか
>>989-990
それがBourne Shellの動作だからね
POSIXはそれを明確化しただけ
さっきからずっとPOSIXに文句を言っているようだが
POSIXにごちゃごちゃ言うようなないようじゃないよ
そんなの意味ないからbashやkshの開発者に
変更してくれって言わないとだめ >>991
> 変数はダメ文字多いけど、頑張るならx$VARとか
え?それで何が防げると思ってるの?
少しよく考えた方がいい
無意味な話をしてる。 >>992
互換性を保つ必要があるわけだから
ここでごちゃごちゃ言ってもどうしようもないよね
POSIXに色々書いてあったとしてもそれは
後からでも変更できるので気にする必要はない ここに居る人は多かれ少なかれ利害関係者なわけだけど、その意識が欠けてる感じがする
俺は物言うエンドユーザー(いわゆるクレーマー)だけど
ニュースグループ、メーリス、バグレポートに直接クレーム付けるのが憚られるインフォーマルな話題やネタは大体ここから拾ってたりする
おまえらエッジケース見付けるのうまいしな
少なくともchetは丁寧に返信してくれるよ、他は知らん
なんか大した実績もないクソ雑魚が
いきがってるなw
>>998
まあ実績はないけど、言わんで困るのも俺だしな まあちゃんと日本語話せるようになれよw
お前の日本語は意味不明で誰も理解できんからwww
10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 439日 3時間 31分 36秒
10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php