トップページ > プログラム > 2019年08月10日 > L+B8OP2P

書き込み順位&時間帯一覧

1 位/134 ID中時間01234567891011121314151617181920212223Total
書き込み数31281420003914000451628631110



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
シェルスクリプト総合 その30
将来性ないプログラミング言語。Delphi含まれず安心
シェルスクリプト総合 その31

書き込みレス一覧

次へ>>
シェルスクリプト総合 その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準拠で書かないと多くの環境で動かない。
次へ>>

※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。