- シェルスクリプト総合 その30
738 :デフォルトの名無しさん[]:2019/08/10(土) 00:01:07.05 ID:L+B8OP2P - はい、24:00締め切りでーす。
> 引き数 a b c を xaz xbz xcz にすればいいわけだが、 > さてどうすればよいだろうか? 解答 for i in "$@"; do set -- "$@" "x${i}z" shift done
|
- シェルスクリプト総合 その30
739 :デフォルトの名無しさん[]:2019/08/10(土) 00:04:08.85 ID:L+B8OP2P - 別解
for i in "$@"; do set -- "$@" "x${i}z" done shift $(($# / 2))
|
- シェルスクリプト総合 その30
741 :デフォルトの名無しさん[]:2019/08/10(土) 00:14:33.81 ID:L+B8OP2P - 知らんがな
|
- シェルスクリプト総合 その30
743 :デフォルトの名無しさん[]:2019/08/10(土) 01:56:14.18 ID:L+B8OP2P - >>742
こんなのトリッキーのうちに入らんでしょ。 シャルスクリプト特有の書き方ってだけ POSIXの範囲ではシェルスクリプトで使える配列は パラメータ引数しか無い。その貴重な配列を使いこなせば bash依存もせずにすむよ
|
- シェルスクリプト総合 その30
746 :デフォルトの名無しさん[sage]:2019/08/10(土) 02:51:21.01 ID:L+B8OP2P - そのとおり。Debianがdashを使ってるのだ。どうしようもない。
|
- シェルスクリプト総合 その30
747 :デフォルトの名無しさん[sage]:2019/08/10(土) 02:52:20.68 ID:L+B8OP2P - あとAlpine Linuxとかな
|
- シェルスクリプト総合 その30
749 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:00:17.60 ID:L+B8OP2P - bash依存っていうのは ${test[@]} とか printf ',%sz' "${@/#/x}" のことな
|
- シェルスクリプト総合 その30
750 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:03:44.77 ID:L+B8OP2P - >>713に関して言えば、
引き数の a b c を xaz xbz xcz にする方法を聞いてるのに 質問の答になってないねとしか言えないから
|
- シェルスクリプト総合 その30
752 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:11:46.31 ID:L+B8OP2P - >>694 再掲
> 今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが > それでもIFS=,を使うならばどうすればよいだろうか? > > 言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、 > さてどうすればよいだろうか? >>738または>>739でパラメータ引数$@に入ってないと IFS=,を使って xaz,xbz,xcz にすることができないだろ 問題をちゃんと読んでいれば、わかるはずのことだが
|
- シェルスクリプト総合 その30
753 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:12:41.50 ID:L+B8OP2P - はぁ、またわずかに書くのが遅れたw
|
- シェルスクリプト総合 その30
755 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:42:31.75 ID:L+B8OP2P - それだと引数に、"a b" が入ってるときにうまく動かない
あと先手を打ってるつもりなら、これを読むように https://en.wikipedia.org/wiki/ASCII#Printable_characters
|
- シェルスクリプト総合 その30
756 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:43:06.24 ID:L+B8OP2P - 訂正
それだと "a b" のように引数にスペースが入ってるときにうまく動かない
|
- シェルスクリプト総合 その30
757 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:46:54.60 ID:L+B8OP2P - 間違えたw
|
- シェルスクリプト総合 その30
759 :デフォルトの名無しさん[sage]:2019/08/10(土) 03:54:52.71 ID:L+B8OP2P - >>758
うん。だから見落としてたw そうだな。あとはサブシェルを使うから遅いのと、 それよりも、zshだと $ ./test.sh a b c xaz,xbz,xcz, 最後に,がつく
|
- シェルスクリプト総合 その30
767 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:09:03.91 ID:L+B8OP2P - >>761
> ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw 何いってんの? POSIX互換シェルにこだわってるだけだよ。 POSIXもdashもzshもbashもワケてない POSIX互換シェルという一つのこだわりw
|
- シェルスクリプト総合 その30
768 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:11:01.54 ID:L+B8OP2P - >>763
> set -uしてると引数が存在しない場合に古いシェルで動かない 苦笑(知ってるw) 間違ってないが、具体的にどのシェルで動かないか言えるかい?
|
- シェルスクリプト総合 その30
769 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:14:17.41 ID:L+B8OP2P - >>764
> POSIX 的には $# == 3 になるのが正しい動作なのかね? めんどくさくて調べてないな。 でもzshだけではなく、今は使われてないだろう古いシェルや とあるシェルの古いバージョンでは4で、後のバージョンでは3になってたりするから おそらく $# == 3 が正しいのだろう。 だが、現実として動かないシェルがある POSIX互換シェルに拘ってるといったが、正確にはPOSIX互換シェルと名乗っている 現実に存在するシェルに拘っているというべきか
|
- シェルスクリプト総合 その30
770 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:14:54.05 ID:L+B8OP2P - >>766
>>694に書いてる
|
- シェルスクリプト総合 その30
773 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:20:00.43 ID:L+B8OP2P - >>762
Solarisは10まで(POSIX互換ではない)Bourne Shellが デフォルトシェルだってのがいただけない Extended Supportが2021年までらしい。 まあ俺はPOSIXじゃないからという理由で切り捨てることにしてるが
|
- シェルスクリプト総合 その30
775 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:23:34.50 ID:L+B8OP2P - >>772
>>694再掲 読める? > 今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが > それでもIFS=,を使うならばどうすればよいだろうか?
|
- シェルスクリプト総合 その30
776 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:26:01.61 ID:L+B8OP2P - >>774
お前プログラマに向いてないよw 推論能力が圧倒的に不足してる 引数が、xaz xbz xcz の状態なら、IFS使って xaz,xbz,xcz にできるだろw って言っても理解できないんだろうなw
|
- シェルスクリプト総合 その30
778 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:29:01.72 ID:L+B8OP2P - >>771
zshのマニュアルにはPOSIXという文字が50個以上存在する これでPOSIXを意識してないとか考えられんわw
|
- シェルスクリプト総合 その30
779 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:29:23.37 ID:L+B8OP2P - >>777
呼びました?(別に隠してない)
|
- シェルスクリプト総合 その30
781 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:38:16.54 ID:L+B8OP2P - >>780
たぶんその挙動はバグで確定だと思うでw
|
- シェルスクリプト総合 その30
782 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:41:34.35 ID:L+B8OP2P - >>768の質問には答えてくれないのかな?
set -uしてると引数が存在しない場合に動かない古いシェルはなにか?
|
- シェルスクリプト総合 その30
785 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:44:17.65 ID:L+B8OP2P - 別にイキってないが、イキってるように見えるのは
俺じゃなくて、お前の問題でしょう? 普通のことなのにお前にはそう見えてしまう。
|
- シェルスクリプト総合 その30
786 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:45:41.26 ID:L+B8OP2P - >>784
何に答えればいいの? 引数を完全に起きかえたいなら置き換えればいいし 置き換えたくないならば、置き換えなければいいだけじゃん
|
- シェルスクリプト総合 その30
787 :デフォルトの名無しさん[sage]:2019/08/10(土) 04:49:56.25 ID:L+B8OP2P - なんで>>765みたいな質問が来るのかを推測したが、
提示したコードはそれで「完成したコード」で そのコードを修正した「応用」は存在しないとか思ってないか? 違うことをしたいならそれに応じて変えればよかろう?
|
- シェルスクリプト総合 その30
790 :デフォルトの名無しさん[sage]:2019/08/10(土) 05:00:56.32 ID:L+B8OP2P - >>788
それを探してきたかw じゃあそこに書いてない情報を。 poshは<0.10(8年前)ということになってるが、未だ最新版(9ヶ月前)の0.13.2でも修正されていない だから「古いシェル」は実は間違い バグ報告はでてるんだがねぇ posh: set -u prevents using empty argument list Date: Wed, 3 May 2017 12:24:01 UTC Found in version posh/0.12.6 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861743 posh can not use "$@" together with set -u Date: Wed, 14 Nov 2018 10:00:01 UTC Found in version posh/0.13.2 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=913718
|
- シェルスクリプト総合 その30
791 :デフォルトの名無しさん[sage]:2019/08/10(土) 05:03:11.51 ID:L+B8OP2P - >>789
> ていうかシェルスクリプトの能力ってそんな高める必要ある? 俺がやりたいことを実現するのに必須だったから 自然と高くなっただけ
|
- シェルスクリプト総合 その30
795 :デフォルトの名無しさん[sage]:2019/08/10(土) 09:44:59.99 ID:L+B8OP2P - >>794
その話はもう終わってる
|
- シェルスクリプト総合 その30
796 :デフォルトの名無しさん[sage]:2019/08/10(土) 09:50:56.01 ID:L+B8OP2P - >>793
何が言いたいのかわからん。 set -uで動かないシェル(例 posh)があると言い出した(>>763)のはあんただろ? なんで俺が書いたコードがset -uで動かないと言い出した本人が set -uで動かないシェルを使う環境なんてあるとは思えないって言ってるんだよw
|
- シェルスクリプト総合 その30
798 :デフォルトの名無しさん[sage]:2019/08/10(土) 09:55:34.95 ID:L+B8OP2P - >>796に対する返答は?
|
- シェルスクリプト総合 その30
800 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:15:01.29 ID:L+B8OP2P - だから>>751は「引数を置換する」コードになってないだろ?
|
- シェルスクリプト総合 その30
802 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:31:58.19 ID:L+B8OP2P - >>801
そのルールを守りつつ、IFS=,でjoinするというテクニックを使って(必須です。カンマ区切りをするときに使用します) 引数 a b c (例です。引数の内容、個数は変わることがあります)から xaz,xbz,xcz (例です。引数の前後にxとzをつけてカンマ区切りにするという意味です) という出力を得るコードを書くところまでやるのが君の仕事。 それができれば一人前だ!
|
- シェルスクリプト総合 その30
803 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:37:28.54 ID:L+B8OP2P - 「POSIX準拠で」をつけ忘れたなw
そこまで文脈読めてないやつじゃないだろうが
|
- シェルスクリプト総合 その30
805 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:47:01.43 ID:L+B8OP2P - >>804
? 俺はシェルスクリプトではやらないが、 他の言語で引数を置換するのはやめろというのはわかるから その理屈は間違いじゃないとして、じゃあそれをシェルスクリプトでやるには どうすればいいだろうか?という新たな出題に変えただけだけど? いや、できるでしょ?これ。
|
- シェルスクリプト総合 その30
806 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:48:10.57 ID:L+B8OP2P - もちろんトリッキーなコードになるだろうけど
(こういうのこそトリッキーというべきだろう)
|
- シェルスクリプト総合 その30
808 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:49:46.44 ID:L+B8OP2P - >>807
自分でルールを守ってない > 普通は置換したもの別の変数に入れて使うよな
|
- シェルスクリプト総合 その30
810 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:51:49.42 ID:L+B8OP2P - それから >>751 に関しては
引数をIFS=,でjoinするならばどうすればいいだろうか?という 出題のルールを守ってないよねってことで>>694に反してる。
|
- シェルスクリプト総合 その30
811 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:52:52.04 ID:L+B8OP2P - >>809
また書くのが遅れたけど、>>751は>>694のルールを守ってないのでだめなんだよ。 その話は終わったって言ってるでしょw
|
- シェルスクリプト総合 その30
812 :デフォルトの名無しさん[sage]:2019/08/10(土) 10:54:58.72 ID:L+B8OP2P - >>809
「置換したものを別の変数に入れて」使わなければだめ 「出力したものを別の変数に入れる」のは自分で作ったルールに違反してるw
|
- シェルスクリプト総合 その30
814 :デフォルトの名無しさん[sage]:2019/08/10(土) 11:22:44.90 ID:L+B8OP2P - 「やりたいこと」は>>694に書いてあるとおり
「IFS=,でjoinするために引数を置き換える」がやりたいこと(解答はすでに出してる) んで、新しい問題の「やりたいこと」は>>802に書いてあるとおり
|
- シェルスクリプト総合 その30
818 :デフォルトの名無しさん[sage]:2019/08/10(土) 12:22:13.64 ID:L+B8OP2P - >>816
あんたはposhが使われる環境があるとは思えないが 古いシェルが使われる環境はあると思ってset -uの話をしたってこと? > bash-4.0.0 ... -4.0.27 > dash-0.4.6 ... -0.4.18 > all ksh88 > ksh93 until release t+20090501 > pdksh-5.1.3, -5.2.14 > mksh before R39 (as pdksh descendant) > posh < 0.10 (as pdksh descendant) > NetBSD 2 ff. /bin/sh > all traditional Bourne shells bash 4.0といえば2009年だね。10年近く前のシェルで動かないからって何? そんなシェルのことまで考えろって言いたかったの?
|
- シェルスクリプト総合 その30
819 :デフォルトの名無しさん[sage]:2019/08/10(土) 12:23:33.86 ID:L+B8OP2P - >>815
俺に出されるのが嫌なら、お前が先に出せばいいやんw
|
- シェルスクリプト総合 その30
821 :デフォルトの名無しさん[sage]:2019/08/10(土) 12:37:04.59 ID:L+B8OP2P - な?日本語の読解力に問題があるやろ?
俺は>>815にレスをしていて、その>>815は > で、後からコード出して と書いてあるように、"出す"のは"コード"という話をしてるのに "問題"を出す話だと勘違いしてくる。 もうね。日本語のレベルでおかしいから、会話にならんのよ。
|
- シェルスクリプト総合 その30
823 :デフォルトの名無しさん[sage]:2019/08/10(土) 12:43:50.43 ID:L+B8OP2P - 足りないなら足りない部分を指摘するべき。
自分で勘違いしておいて、後から足りなかったんだっていうなよw
|
- シェルスクリプト総合 その30
835 :デフォルトの名無しさん[sage]:2019/08/10(土) 16:16:23.61 ID:L+B8OP2P - >>829
その時代まで考えることと、poshが最新版でも 直ってないことは矛盾しないんだがw
|
- シェルスクリプト総合 その30
836 :デフォルトの名無しさん[sage]:2019/08/10(土) 16:17:39.49 ID:L+B8OP2P - >>834
引数に * を使いたいときw
|
- シェルスクリプト総合 その30
837 :デフォルトの名無しさん[sage]:2019/08/10(土) 16:22:27.62 ID:L+B8OP2P - >>830
>>2にも書いてあるが、/bin/shの実体が何かわからん時代になったからな > FreeBSD ユーザーは /bin/sh の実体が ash なので注意。 > Solaris, OpenBSD ユーザーは /bin/sh の実体が ksh なので注意。 > macOS 10.15以降のユーザーは/bin/sh の実体が zsh なので注意。 > android ユーザーは /bin/sh の実体が mksh なので注意。 bashで動けば良いんでしょ?という時代は終わった。 POSIX準拠で書かないと多くの環境で動かない。
|