シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
前スレ:
シェルスクリプト総合 その29
https://mevius.5ch.net/test/read.cgi/tech/1537540487/
シェルスクリプト総合 その30
■ このスレッドは過去ログ倉庫に格納されています
2019/07/01(月) 23:04:27.02ID:/rKj5XUf
701デフォルトの名無しさん
2019/08/09(金) 03:43:31.73ID:tip6m9df >>699
shift 後の $# が 0 以上だと成功になってしまうので引数が1個の場合、
$ set -- a
$ var=$(printf "x${1}z";shift&&printf ',%sz' "${@/#/x}")
$ echo "$var"
xaz,z
となってしまう。
一応、引数は1個以上を想定して、2個以上なら (($#))&& は不要なんだけどね
引数なしでも処理するなら、もっと酷くなるw
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',%sz' "${@/#/x}"; })
shift 後の $# が 0 以上だと成功になってしまうので引数が1個の場合、
$ set -- a
$ var=$(printf "x${1}z";shift&&printf ',%sz' "${@/#/x}")
$ echo "$var"
xaz,z
となってしまう。
一応、引数は1個以上を想定して、2個以上なら (($#))&& は不要なんだけどね
引数なしでも処理するなら、もっと酷くなるw
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',%sz' "${@/#/x}"; })
702デフォルトの名無しさん
2019/08/09(金) 03:46:25.07ID:tip6m9df おっと、
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',x%sz' "$@"; })
だね
var=$((($#))&&{ printf "x${1}z";shift;(($#))&&printf ',x%sz' "$@"; })
だね
703デフォルトの名無しさん
2019/08/09(金) 03:55:40.01ID:sB3SWfXZ ああprintfは引き数がない場合でも表示されるのか
704デフォルトの名無しさん
2019/08/09(金) 04:24:13.39ID:err5h/zJ >>673
仮に別人だとしても同じようなことしてるぞ。
自分で模索しろとか言って解法を提示していないにもかかわらず
ある程度要求を満たす解法が上がった瞬間それにケチ付けはじめてるじゃん。
もしもほんとうに「自分で模索しろ」って思ってんなら黙っときゃいい話。
わざわざ人が答えを述べてからそれに乗っかるなんてマネする必要ない。
仮に別人だとしても同じようなことしてるぞ。
自分で模索しろとか言って解法を提示していないにもかかわらず
ある程度要求を満たす解法が上がった瞬間それにケチ付けはじめてるじゃん。
もしもほんとうに「自分で模索しろ」って思ってんなら黙っときゃいい話。
わざわざ人が答えを述べてからそれに乗っかるなんてマネする必要ない。
705デフォルトの名無しさん
2019/08/09(金) 04:28:32.89ID:err5h/zJ >>700
このコマンドラインをPOSIXに準じたものにするには
(愚直に言えば)単に${VAR/aaa/bbb}をprintf '%s' "$VAR" | sed -e 's/aaa/bbb/'
に変えればいいだけでは?
それかPOSIXの範疇で変数の置換展開を実現する方法を訊いているのか?
それじゃあ多分無理だ。
このコマンドラインをPOSIXに準じたものにするには
(愚直に言えば)単に${VAR/aaa/bbb}をprintf '%s' "$VAR" | sed -e 's/aaa/bbb/'
に変えればいいだけでは?
それかPOSIXの範疇で変数の置換展開を実現する方法を訊いているのか?
それじゃあ多分無理だ。
706デフォルトの名無しさん
2019/08/09(金) 04:30:09.25ID:err5h/zJ まあ尤もprintf sedなんていちいち呼び出すなんてバカなマネは普通しないが。
707デフォルトの名無しさん
2019/08/09(金) 04:35:02.69ID:sB3SWfXZ708デフォルトの名無しさん
2019/08/09(金) 04:36:42.97ID:sB3SWfXZ このテクニックはいろいろと応用が効くのだ!キリッ!
709デフォルトの名無しさん
2019/08/09(金) 04:39:32.46ID:yPcnAt2h shiftを上手く使えば
N番目以降の引数だけ別の処理に使うことってできるよね?
あとbashの引数って10超えるとおかしくなるってマジ?
N番目以降の引数だけ別の処理に使うことってできるよね?
あとbashの引数って10超えるとおかしくなるってマジ?
710デフォルトの名無しさん
2019/08/09(金) 04:40:03.48ID:yPcnAt2h 10超えると→10個以上引数持たせると
711デフォルトの名無しさん
2019/08/09(金) 04:40:29.97ID:sB3SWfXZ712デフォルトの名無しさん
2019/08/09(金) 04:44:59.16ID:sB3SWfXZ 引数をうまく扱うにはshift、
引数を高度に扱うにはevalを使う
引数を高度に扱うにはevalを使う
713デフォルトの名無しさん
2019/08/09(金) 05:33:56.10ID:err5h/zJ714デフォルトの名無しさん
2019/08/09(金) 16:11:09.79ID:R8nkiB91 awkとか使ってtsvを別のtsvに挿入させる方法ってある?
hoge.tsv
a b e
1 2 5
huga.tsv
c d
3 4
↓
hoge_huga.tsv
a b c d e
1 2 3 4 5
みたいな
hoge.tsv
a b e
1 2 5
huga.tsv
c d
3 4
↓
hoge_huga.tsv
a b c d e
1 2 3 4 5
みたいな
715デフォルトの名無しさん
2019/08/09(金) 17:22:23.99ID:tip6m9df 行と列をひっくり返す transpose っていう awk script を作って、
========
#!/usr/bin/awk -f
{for(i=1;i<=NF;i++) a[NR,i]=$i}
END{
for(j=1;j<=NF;j++) {
str=a[1,j]
for(i=2;i<=NR;i++) str=str" "a[i,j]
print str
}
}
========
$ paste hoge.tsv huga.tsv | ./transpose | sort -k1,1 | ./transpose
a b c d e
1 2 3 4 5
========
#!/usr/bin/awk -f
{for(i=1;i<=NF;i++) a[NR,i]=$i}
END{
for(j=1;j<=NF;j++) {
str=a[1,j]
for(i=2;i<=NR;i++) str=str" "a[i,j]
print str
}
}
========
$ paste hoge.tsv huga.tsv | ./transpose | sort -k1,1 | ./transpose
a b c d e
1 2 3 4 5
716デフォルトの名無しさん
2019/08/09(金) 17:43:24.97ID:UutwPLbs717デフォルトの名無しさん
2019/08/09(金) 18:18:03.48ID:err5h/zJ >>715
こっちのやりかたのほうが汎用的だし個人的には好きかな。
こっちのやりかたのほうが汎用的だし個人的には好きかな。
718デフォルトの名無しさん
2019/08/09(金) 18:25:29.43ID:UutwPLbs (´-`).。oO(列の挿入なのに何故ソートするんだろう)
719デフォルトの名無しさん
2019/08/09(金) 18:26:02.71ID:X5pM/Zqg >>716
awkのところcutでやろうとして失敗してる質問stackoverflowにたくさんあるね。
何度も提案されたが全部リジェクトされたんだとか。
https://stackoverflow.com/questions/1037171/forcing-the-order-of-output-fields-from-cut-command/#answer-1037260
awkのところcutでやろうとして失敗してる質問stackoverflowにたくさんあるね。
何度も提案されたが全部リジェクトされたんだとか。
https://stackoverflow.com/questions/1037171/forcing-the-order-of-output-fields-from-cut-command/#answer-1037260
720デフォルトの名無しさん
2019/08/09(金) 18:42:56.05ID:xLAwVgGE む。出遅れたか。気づいていたんだが書き込む時間がなかった。
>>716 と近いが、tsvなら入力をタブ文字にしたほうが良いだろう
でないとスペースまで区切りとして扱われる
paste hoge.tsv huga.tsv | awk -F"\t" -v OFS="\t" '{print $1,$2,$4,$5,$3}'
>>716 と近いが、tsvなら入力をタブ文字にしたほうが良いだろう
でないとスペースまで区切りとして扱われる
paste hoge.tsv huga.tsv | awk -F"\t" -v OFS="\t" '{print $1,$2,$4,$5,$3}'
721デフォルトの名無しさん
2019/08/09(金) 18:45:10.20ID:xLAwVgGE722デフォルトの名無しさん
2019/08/09(金) 18:48:55.70ID:xLAwVgGE >>713
その答えもありだが、それはそれとして
引き数の a b c を xaz xbz xcz にするPOSIX準拠のテクニックって
あまり知られてないのか?
まさかこんなに出ないとは思わなかった。
その答えもありだが、それはそれとして
引き数の a b c を xaz xbz xcz にするPOSIX準拠のテクニックって
あまり知られてないのか?
まさかこんなに出ないとは思わなかった。
723デフォルトの名無しさん
2019/08/09(金) 19:01:27.20ID:xLAwVgGE 同時に二つのファイルを開くやり方も分かったことだし、
ついでにシェルスクリプトだけで実現するやり方を書いておこう
#!/bin/sh
exec 3<./hoge.tsv
exec 4<./huga.tsv
IFS=$(printf '\t')
until
eof=1
read -r col1 col2 col3 <&3 && eof=''
read -r col4 col5 <&4 && eof=''
[ "$eof" ]
do
set -- "$col1" "$col2" "$col4" "$col5" "$col3"
echo "$*"
done
ついでにシェルスクリプトだけで実現するやり方を書いておこう
#!/bin/sh
exec 3<./hoge.tsv
exec 4<./huga.tsv
IFS=$(printf '\t')
until
eof=1
read -r col1 col2 col3 <&3 && eof=''
read -r col4 col5 <&4 && eof=''
[ "$eof" ]
do
set -- "$col1" "$col2" "$col4" "$col5" "$col3"
echo "$*"
done
724デフォルトの名無しさん
2019/08/09(金) 19:03:15.21ID:R8nkiB91725デフォルトの名無しさん
2019/08/09(金) 19:04:32.76ID:xLAwVgGE >>724
また、てめぇぇぇぇか!
また、てめぇぇぇぇか!
726デフォルトの名無しさん
2019/08/09(金) 19:10:00.87ID:X5pM/Zqg GNU datamashってのがあんだね。
$ paste hoge.tsv huga.tsv | datamash transpose | sort | datamash transpose
とか。挿入じゃなくてソートだけど。
$ paste hoge.tsv huga.tsv | datamash transpose | sort | datamash transpose
とか。挿入じゃなくてソートだけど。
727デフォルトの名無しさん
2019/08/09(金) 19:14:10.02ID:tip6m9df ソートしたのは >>714 で hoge.tsv と huga.tsv の一行目の項目が辞書順に
並ぶ様に挿入する、って思ったんだよね
並ぶ様に挿入する、って思ったんだよね
728デフォルトの名無しさん
2019/08/09(金) 19:21:09.66ID:UutwPLbs >>720
FSのデフォルトはスペースとタブだから指定する必要ないよ
FSのデフォルトはスペースとタブだから指定する必要ないよ
729デフォルトの名無しさん
2019/08/09(金) 19:21:36.74ID:err5h/zJ なんかこのスレに書き込む質問者ってお客は神様だみたいな発想してる人多い印象がある。
多少の問題は自力で解決しろよって思うわ。
「その例"だけ"に〜」とか喚いてるけど,その「例」とやらがマズい例なのでは?とは1ミリも考えてなさそう。
いつも自分が正しい。問題の責任は他人にある。
まあスレの全員がそうじゃないけどね。極一部。
多少の問題は自力で解決しろよって思うわ。
「その例"だけ"に〜」とか喚いてるけど,その「例」とやらがマズい例なのでは?とは1ミリも考えてなさそう。
いつも自分が正しい。問題の責任は他人にある。
まあスレの全員がそうじゃないけどね。極一部。
730デフォルトの名無しさん
2019/08/09(金) 19:21:58.99ID:UutwPLbs731デフォルトの名無しさん
2019/08/09(金) 19:22:34.09ID:xLAwVgGE >>728
アホか、スペースとタブだからタブだけにするんやろw
アホか、スペースとタブだからタブだけにするんやろw
732デフォルトの名無しさん
2019/08/09(金) 19:25:33.15ID:xLAwVgGE733デフォルトの名無しさん
2019/08/09(金) 19:27:56.83ID:UutwPLbs (´-`).。oO(勘違いしたって言ってるんだからもうええやん)
734デフォルトの名無しさん
2019/08/09(金) 19:28:06.46ID:xLAwVgGE735デフォルトの名無しさん
2019/08/09(金) 19:29:12.17ID:xLAwVgGE >>733
スレ更新してから書き込むまでに、34秒以上かかっただけだよw
スレ更新してから書き込むまでに、34秒以上かかっただけだよw
736デフォルトの名無しさん
2019/08/09(金) 19:33:01.55ID:OjVO+GBn 主気取り
737デフォルトの名無しさん
2019/08/09(金) 19:34:19.38ID:xLAwVgGE しゅ‐き【主気】
?名? そのものがいつも持っている運気。⇔客気(かっき)。〔夢渓筆談‐象数・一〕
?名? そのものがいつも持っている運気。⇔客気(かっき)。〔夢渓筆談‐象数・一〕
738デフォルトの名無しさん
2019/08/10(土) 00:01:07.05ID:L+B8OP2P はい、24:00締め切りでーす。
> 引き数 a b c を xaz xbz xcz にすればいいわけだが、
> さてどうすればよいだろうか?
解答
for i in "$@"; do
set -- "$@" "x${i}z"
shift
done
> 引き数 a b c を xaz xbz xcz にすればいいわけだが、
> さてどうすればよいだろうか?
解答
for i in "$@"; do
set -- "$@" "x${i}z"
shift
done
739デフォルトの名無しさん
2019/08/10(土) 00:04:08.85ID:L+B8OP2P 別解
for i in "$@"; do
set -- "$@" "x${i}z"
done
shift $(($# / 2))
for i in "$@"; do
set -- "$@" "x${i}z"
done
shift $(($# / 2))
740デフォルトの名無しさん
2019/08/10(土) 00:14:02.13ID:6d2gRK68 なんかシラケちゃったな
741デフォルトの名無しさん
2019/08/10(土) 00:14:33.81ID:L+B8OP2P 知らんがな
742デフォルトの名無しさん
2019/08/10(土) 01:26:32.09ID:lTTXvTcQ なんか対抗するつもりはないけど俺の回答のほうが何やってるか分かりやすい気がする…。
まあトリッキーなシェルスクリプトを書くのは個人の自由だけど
まあトリッキーなシェルスクリプトを書くのは個人の自由だけど
743デフォルトの名無しさん
2019/08/10(土) 01:56:14.18ID:L+B8OP2P >>742
こんなのトリッキーのうちに入らんでしょ。
シャルスクリプト特有の書き方ってだけ
POSIXの範囲ではシェルスクリプトで使える配列は
パラメータ引数しか無い。その貴重な配列を使いこなせば
bash依存もせずにすむよ
こんなのトリッキーのうちに入らんでしょ。
シャルスクリプト特有の書き方ってだけ
POSIXの範囲ではシェルスクリプトで使える配列は
パラメータ引数しか無い。その貴重な配列を使いこなせば
bash依存もせずにすむよ
744デフォルトの名無しさん
2019/08/10(土) 02:44:27.27ID:x6+Jkr/9 bashでいいじゃん
bash動かないようなクソ環境なんかないだろ今時
bash動かないようなクソ環境なんかないだろ今時
745デフォルトの名無しさん
2019/08/10(土) 02:48:00.53ID:6d2gRK68 POSIX原理主義者の彼にはそんな煽りは通用しない!
746デフォルトの名無しさん
2019/08/10(土) 02:51:21.01ID:L+B8OP2P そのとおり。Debianがdashを使ってるのだ。どうしようもない。
747デフォルトの名無しさん
2019/08/10(土) 02:52:20.68ID:L+B8OP2P あとAlpine Linuxとかな
748デフォルトの名無しさん
2019/08/10(土) 02:58:22.15ID:lTTXvTcQ >>743
うむ。トリッキーと書いたのは失敗だったな。
ちょっと勘違いを生んでしまった。
繰り返すけどあなたの解答を否定する気は全くないし,自分の解答が一番だなんて思ってないけど
引数「a b c d」を「xaz xbz xcz」に変換するにあたって
「手続き型言語としてのシェルスクリプト」を考えたときに
「引数に順次同じ変換を施して→余計なものを置換する」ほうが
「引数の仕様を利用してfor文を回す→(置き換えられた)引数として利用」
よりも単純かなぁと思っただけ。
あと(問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
それこそ「引数を置き換えて新たな引数として利用したい」という要求ならばfor文とsetコマンドを使った方法が
いいんだろうけども。
ところで>>713がBash依存という話だけど
sed -e 's/ $/\
'
↑これってBashでしか使えなかったっけ? sedで何かから改行に置換する方法。
一応The Open Groupの仕様書には
A line can be split by substituting a <newline> into it.
The application shall escape the <newline> in the replacement by preceding it by a <backslash>.
と書かれてるんだけど。
うむ。トリッキーと書いたのは失敗だったな。
ちょっと勘違いを生んでしまった。
繰り返すけどあなたの解答を否定する気は全くないし,自分の解答が一番だなんて思ってないけど
引数「a b c d」を「xaz xbz xcz」に変換するにあたって
「手続き型言語としてのシェルスクリプト」を考えたときに
「引数に順次同じ変換を施して→余計なものを置換する」ほうが
「引数の仕様を利用してfor文を回す→(置き換えられた)引数として利用」
よりも単純かなぁと思っただけ。
あと(問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
それこそ「引数を置き換えて新たな引数として利用したい」という要求ならばfor文とsetコマンドを使った方法が
いいんだろうけども。
ところで>>713がBash依存という話だけど
sed -e 's/ $/\
'
↑これってBashでしか使えなかったっけ? sedで何かから改行に置換する方法。
一応The Open Groupの仕様書には
A line can be split by substituting a <newline> into it.
The application shall escape the <newline> in the replacement by preceding it by a <backslash>.
と書かれてるんだけど。
749デフォルトの名無しさん
2019/08/10(土) 03:00:17.60ID:L+B8OP2P bash依存っていうのは ${test[@]} とか printf ',%sz' "${@/#/x}" のことな
750デフォルトの名無しさん
2019/08/10(土) 03:03:44.77ID:L+B8OP2P751デフォルトの名無しさん
2019/08/10(土) 03:10:55.16ID:lTTXvTcQ >>750
うん?
$ cat ./test.sh
#!/bin/sh
printf 'x%sz ' "$@" | sed -e 's/ $/\
/'
$ ./test.sh a b c
xaz xbz xcz
となって要求を満してそうなんだけども,違うのかな?
うん?
$ cat ./test.sh
#!/bin/sh
printf 'x%sz ' "$@" | sed -e 's/ $/\
/'
$ ./test.sh a b c
xaz xbz xcz
となって要求を満してそうなんだけども,違うのかな?
752デフォルトの名無しさん
2019/08/10(土) 03:11:46.31ID:L+B8OP2P753デフォルトの名無しさん
2019/08/10(土) 03:12:41.50ID:L+B8OP2P はぁ、またわずかに書くのが遅れたw
754デフォルトの名無しさん
2019/08/10(土) 03:35:54.66ID:6d2gRK68 $@ の中身が printable character だけなら GNU awk の SUBSEP 変数と同じ
様に IFS に '\034'(File Separator) を指定して
[ $# -eq 0 ] && exit 0
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とか
様に IFS に '\034'(File Separator) を指定して
[ $# -eq 0 ] && exit 0
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とか
755デフォルトの名無しさん
2019/08/10(土) 03:42:31.75ID:L+B8OP2P それだと引数に、"a b" が入ってるときにうまく動かない
あと先手を打ってるつもりなら、これを読むように
https://en.wikipedia.org/wiki/ASCII#Printable_characters
あと先手を打ってるつもりなら、これを読むように
https://en.wikipedia.org/wiki/ASCII#Printable_characters
756デフォルトの名無しさん
2019/08/10(土) 03:43:06.24ID:L+B8OP2P 訂正
それだと "a b" のように引数にスペースが入ってるときにうまく動かない
それだと "a b" のように引数にスペースが入ってるときにうまく動かない
757デフォルトの名無しさん
2019/08/10(土) 03:46:54.60ID:L+B8OP2P 間違えたw
758デフォルトの名無しさん
2019/08/10(土) 03:50:33.54ID:6d2gRK68 set -- a "b c" d
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とすると xaz,xb cz,xdz となるのだが、そういう事じゃなくて?
IFS=$(printf '\034');set -- $(printf "x%sz${IFS}" "$@")
IFS=,;echo "$*"
とすると xaz,xb cz,xdz となるのだが、そういう事じゃなくて?
759デフォルトの名無しさん
2019/08/10(土) 03:54:52.71ID:L+B8OP2P760デフォルトの名無しさん
2019/08/10(土) 03:57:09.38ID:leF4BPLu bash ならどれぐらい分かりやすく書ける?
761デフォルトの名無しさん
2019/08/10(土) 03:58:27.60ID:lTTXvTcQ ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw
762デフォルトの名無しさん
2019/08/10(土) 04:01:38.59ID:lTTXvTcQ763デフォルトの名無しさん
2019/08/10(土) 04:04:22.25ID:lTTXvTcQ764デフォルトの名無しさん
2019/08/10(土) 04:04:55.05ID:6d2gRK68765デフォルトの名無しさん
2019/08/10(土) 04:06:36.42ID:lTTXvTcQ >>752
訊きたいんだけど,
引数を完全に置き換えてしまうことについてはどう思ってる?
再掲するけど
> (問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
> 引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
引数自体を弄くる方法だとこういうことになるのでは……?
訊きたいんだけど,
引数を完全に置き換えてしまうことについてはどう思ってる?
再掲するけど
> (問題文に書いてないので推測するしかないが)引数自体はそのまま残したい場合もあるだろうから
> 引数を置き換えてしまう方法だと不本意な結果を招くかもしれないとも思った。
引数自体を弄くる方法だとこういうことになるのでは……?
766デフォルトの名無しさん
2019/08/10(土) 04:08:24.77ID:lTTXvTcQ767デフォルトの名無しさん
2019/08/10(土) 04:09:03.91ID:L+B8OP2P >>761
> ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw
何いってんの? POSIX互換シェルにこだわってるだけだよ。
POSIXもdashもzshもbashもワケてない
POSIX互換シェルという一つのこだわりw
> ぽじっくすに拘ったりぜっしゅに拘ったり急がしやっちゃなw
何いってんの? POSIX互換シェルにこだわってるだけだよ。
POSIXもdashもzshもbashもワケてない
POSIX互換シェルという一つのこだわりw
768デフォルトの名無しさん
2019/08/10(土) 04:11:01.54ID:L+B8OP2P769デフォルトの名無しさん
2019/08/10(土) 04:14:17.41ID:L+B8OP2P >>764
> POSIX 的には $# == 3 になるのが正しい動作なのかね?
めんどくさくて調べてないな。
でもzshだけではなく、今は使われてないだろう古いシェルや
とあるシェルの古いバージョンでは4で、後のバージョンでは3になってたりするから
おそらく $# == 3 が正しいのだろう。
だが、現実として動かないシェルがある
POSIX互換シェルに拘ってるといったが、正確にはPOSIX互換シェルと名乗っている
現実に存在するシェルに拘っているというべきか
> POSIX 的には $# == 3 になるのが正しい動作なのかね?
めんどくさくて調べてないな。
でもzshだけではなく、今は使われてないだろう古いシェルや
とあるシェルの古いバージョンでは4で、後のバージョンでは3になってたりするから
おそらく $# == 3 が正しいのだろう。
だが、現実として動かないシェルがある
POSIX互換シェルに拘ってるといったが、正確にはPOSIX互換シェルと名乗っている
現実に存在するシェルに拘っているというべきか
770デフォルトの名無しさん
2019/08/10(土) 04:14:54.05ID:L+B8OP2P771デフォルトの名無しさん
2019/08/10(土) 04:15:21.60ID:lTTXvTcQ ZshってPOSIX互換を謳ってたっけ?
少なくとも公式ページ[zsh.org]にはそんな記述は見当らんが…。
もしかしてemulate -R shをPOSIX準拠モードとかだと思ってる…?
少なくとも公式ページ[zsh.org]にはそんな記述は見当らんが…。
もしかしてemulate -R shをPOSIX準拠モードとかだと思ってる…?
772デフォルトの名無しさん
2019/08/10(土) 04:19:09.04ID:lTTXvTcQ773デフォルトの名無しさん
2019/08/10(土) 04:20:00.43ID:L+B8OP2P >>762
Solarisは10まで(POSIX互換ではない)Bourne Shellが
デフォルトシェルだってのがいただけない
Extended Supportが2021年までらしい。
まあ俺はPOSIXじゃないからという理由で切り捨てることにしてるが
Solarisは10まで(POSIX互換ではない)Bourne Shellが
デフォルトシェルだってのがいただけない
Extended Supportが2021年までらしい。
まあ俺はPOSIXじゃないからという理由で切り捨てることにしてるが
774デフォルトの名無しさん
2019/08/10(土) 04:20:29.77ID:lTTXvTcQ >>694
> 今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが →分かる
> それでもIFS=,を使うならばどうすればよいだろうか?→そうだな,どうすればいいんだろう。
> 言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、→え?空白区切り?今IFS=,の話だよな??
> さてどうすればよいだろうか? →????
> 今回は a b c を xaz,xbz,xcz にしたいから IFS=, を使わなかったわけだが →分かる
> それでもIFS=,を使うならばどうすればよいだろうか?→そうだな,どうすればいいんだろう。
> 言い換えると、引き数 a b c を xaz xbz xcz にすればいいわけだが、→え?空白区切り?今IFS=,の話だよな??
> さてどうすればよいだろうか? →????
775デフォルトの名無しさん
2019/08/10(土) 04:23:34.50ID:L+B8OP2P776デフォルトの名無しさん
2019/08/10(土) 04:26:01.61ID:L+B8OP2P >>774
お前プログラマに向いてないよw
推論能力が圧倒的に不足してる
引数が、xaz xbz xcz の状態なら、IFS使って xaz,xbz,xcz にできるだろw
って言っても理解できないんだろうなw
お前プログラマに向いてないよw
推論能力が圧倒的に不足してる
引数が、xaz xbz xcz の状態なら、IFS使って xaz,xbz,xcz にできるだろw
って言っても理解できないんだろうなw
777デフォルトの名無しさん
2019/08/10(土) 04:28:59.25ID:YdwKfvKq いつものクイズくん
778デフォルトの名無しさん
2019/08/10(土) 04:29:01.72ID:L+B8OP2P779デフォルトの名無しさん
2019/08/10(土) 04:29:23.37ID:L+B8OP2P >>777
呼びました?(別に隠してない)
呼びました?(別に隠してない)
780デフォルトの名無しさん
2019/08/10(土) 04:35:32.28ID:6d2gRK68 >>778
Zsh is able to emulate POSIX shells, but its default mode is not POSIX compatible
なんて書いてあるから何か変数を設定しないとダメみたいだな
色々弄ってるけど $# が 3 にならんのぅ…ソースコード読むしかないかなw
Zsh is able to emulate POSIX shells, but its default mode is not POSIX compatible
なんて書いてあるから何か変数を設定しないとダメみたいだな
色々弄ってるけど $# が 3 にならんのぅ…ソースコード読むしかないかなw
781デフォルトの名無しさん
2019/08/10(土) 04:38:16.54ID:L+B8OP2P >>780
たぶんその挙動はバグで確定だと思うでw
たぶんその挙動はバグで確定だと思うでw
782デフォルトの名無しさん
2019/08/10(土) 04:41:34.35ID:L+B8OP2P >>768の質問には答えてくれないのかな?
set -uしてると引数が存在しない場合に動かない古いシェルはなにか?
set -uしてると引数が存在しない場合に動かない古いシェルはなにか?
783デフォルトの名無しさん
2019/08/10(土) 04:42:42.71ID:lTTXvTcQ784デフォルトの名無しさん
2019/08/10(土) 04:43:21.02ID:lTTXvTcQ785デフォルトの名無しさん
2019/08/10(土) 04:44:17.65ID:L+B8OP2P 別にイキってないが、イキってるように見えるのは
俺じゃなくて、お前の問題でしょう? 普通のことなのにお前にはそう見えてしまう。
俺じゃなくて、お前の問題でしょう? 普通のことなのにお前にはそう見えてしまう。
786デフォルトの名無しさん
2019/08/10(土) 04:45:41.26ID:L+B8OP2P787デフォルトの名無しさん
2019/08/10(土) 04:49:56.25ID:L+B8OP2P なんで>>765みたいな質問が来るのかを推測したが、
提示したコードはそれで「完成したコード」で
そのコードを修正した「応用」は存在しないとか思ってないか?
違うことをしたいならそれに応じて変えればよかろう?
提示したコードはそれで「完成したコード」で
そのコードを修正した「応用」は存在しないとか思ってないか?
違うことをしたいならそれに応じて変えればよかろう?
788デフォルトの名無しさん
2019/08/10(土) 04:50:45.96ID:lTTXvTcQ >>782
>>786で一応答えを頂いたので,>>768への回答をば。
https://www.in-ulm.de/~mascheck/various/bourne_args/
ここの
These shells behave the old way and need ${1+"$@"}:
に色々載ってるぜ
俺が知らないシェルもあって勉強になったわ。
>>786で一応答えを頂いたので,>>768への回答をば。
https://www.in-ulm.de/~mascheck/various/bourne_args/
ここの
These shells behave the old way and need ${1+"$@"}:
に色々載ってるぜ
俺が知らないシェルもあって勉強になったわ。
789デフォルトの名無しさん
2019/08/10(土) 04:57:52.03ID:lTTXvTcQ790デフォルトの名無しさん
2019/08/10(土) 05:00:56.32ID: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
それを探してきたか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
791デフォルトの名無しさん
2019/08/10(土) 05:03:11.51ID:L+B8OP2P792デフォルトの名無しさん
2019/08/10(土) 05:19:53.11ID:YdwKfvKq793デフォルトの名無しさん
2019/08/10(土) 06:27:36.08ID:lTTXvTcQ >>790
うーん。
まあそうなのかもしれないが
poshを「無意識に」使ってしまう環境なんてあるのだろうか?
例えば#!/bin/shが/usr/bin/bashにリンクされてる環境であれば,
BashのPOSIX互換モード特有のバグには注意しなくてはいけないし,
/bin/shの実体が/usr/bin/bashになってる環境は多いので,
多くの利用者が「今 自分が使っている/bin/shが実はBashだ」と意識することなく
POSIX shで正しく動く筈のシェルスクリプトを走らせることがあると想定できる。
でもposhが既定で/bin/shにリンクされてたりする環境があるとは思えない…。
うーん。
まあそうなのかもしれないが
poshを「無意識に」使ってしまう環境なんてあるのだろうか?
例えば#!/bin/shが/usr/bin/bashにリンクされてる環境であれば,
BashのPOSIX互換モード特有のバグには注意しなくてはいけないし,
/bin/shの実体が/usr/bin/bashになってる環境は多いので,
多くの利用者が「今 自分が使っている/bin/shが実はBashだ」と意識することなく
POSIX shで正しく動く筈のシェルスクリプトを走らせることがあると想定できる。
でもposhが既定で/bin/shにリンクされてたりする環境があるとは思えない…。
794デフォルトの名無しさん
2019/08/10(土) 08:53:06.96ID:x0rFB4wI >>751
この書き方が分かりやすくて良いと思うんだけど何か問題あるの?
この書き方が分かりやすくて良いと思うんだけど何か問題あるの?
795デフォルトの名無しさん
2019/08/10(土) 09:44:59.99ID:L+B8OP2P >>794
その話はもう終わってる
その話はもう終わってる
796デフォルトの名無しさん
2019/08/10(土) 09:50:56.01ID:L+B8OP2P797デフォルトの名無しさん
2019/08/10(土) 09:52:55.77ID:lTTXvTcQ >>794
もう触れるな。
もう触れるな。
798デフォルトの名無しさん
2019/08/10(土) 09:55:34.95ID:L+B8OP2P >>796に対する返答は?
799デフォルトの名無しさん
2019/08/10(土) 10:06:01.28ID:x0rFB4wI 引数を置換するってだけで何をぐだぐだ言ってるんだかw
800デフォルトの名無しさん
2019/08/10(土) 10:15:01.29ID:L+B8OP2P だから>>751は「引数を置換する」コードになってないだろ?
801デフォルトの名無しさん
2019/08/10(土) 10:20:30.35ID:x0rFB4wI オリジナルの引数を置換するのはプログラマーの本能が止めろと言っているw
普通は置換したもの別の変数に入れて使うよな
普通は置換したもの別の変数に入れて使うよな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 上野動物園の双子パンダ、1月末に中国に返還へ 国内でパンダ不在に [蚤の市★]
- 中国軍機のレーダー照射1週間 駆け引き続く 中国、米のレッドライン模索 日本、米以外の同志国とも連携探る 米は対立から距離置く★2 [ぐれ★]
- ゼレンスキー氏、NATO加盟断念に言及 ドイツで米代表団と [蚤の市★]
- 【芸能】粗品、日本テレビに苦言 客のレベルが「かなり低い。あいつら分かってない」「拍手したいだけやねん」 [冬月記者★]
- 橋下徹氏「総理なら岡田さんに何を聴かれても耐えてほしかった」 高市首相の台湾有事めぐる答弁に# [jinjin★]
- 【静岡】伊東市長選、前市議の杉本氏初当選 学歴詐称疑惑の田久保氏は及ばず 市長選3700万円、市議選6300万円の計1億円費やされる [ぐれ★]
- (財務)片山さつき『サナエノミクス💕』開始。「所得、経済、税収全てが上がる夢のような政策」 [153490809]
- リコリコとかいうアニメ、ヒョロガリJKがムキムキのおっさんボコってて萎えて1話切り
- スモークチーズって食べ始めたらやめられない止まらないになるんだが
- 窓口で「いったん10割負担」の件数が1年で2倍近くに増加。「マイナ保険証」スマホマイナも登場で医療現場「もう無理」 [256556981]
- フィンランド人による吊り目でアジア人差別事件、日に日に炎上が大きくなっていく [279254606]
- 新幹線で越後湯沢に向かってるの(´・ω・`)
