- 1 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:07:26.41 .net]
- シェルスクリプトの総合スレです。
□お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆーな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その25 echo.2ch.net/test/read.cgi/unix/1439563321/
- 961 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:32:29.46 .net]
- なお、俺が書いたコードだと以下のように正しく出力される
$ test.sh "a" "b${A}b" "c" "d" "e" 1: bb b b b b 2: c 3: d >>928を参考にして以下のように書いた selectargnum() { func=$1 start=$2 length=$3 shift 3 i=0 last=$((start+length)) for arg in "$@"; do : $((i+=1)) [ $i -gt $length ] && shift [ $i -ge $last ] && continue shift set -- "$@" "$arg" done $func "$@" } somefunc() { printf '1: %s\n' "$1" printf '2: %s\n' "$2" printf '3: %s\n' "$3" } selectargnum somefunc 2 3 "$@"
- 962 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 04:34:38.30 .net]
- ただ問題は、>>935のコードを書いた俺自身が
なんでこのコードで動くのかよく分かってない所だなw 誰か俺の書いたコードが何をやってるのか教えてくれw >>928のコードはなにやら引数を一周させているみたいだ。 俺が書いたコードは、その一周を途中で中断させているようだな?
|

|