- 1 名前:名無しさん@お腹いっぱい。 mailto:sageteoff [2015/08/14(金) 23:42:01.51 .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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その24 peace.2ch.net/test/read.cgi/unix/1415634843/
- 20 名前:名無しさん@お腹いっぱい。 [2015/08/23(日) 21:52:42.48 .net]
- ubuntuです。超初歩の段階なのですが
for file in ${1}/* do echo "${file}" done 上記のコードで $sh test.sh ~/Desktop/foo とすると期待通りに /home/hoge/Desktop/foo/a /home/hoge/Desktop/foo/b /home/hoge/Desktop/foo/c と表示されるのですが $sh test.sh "~/Desktop/foo" とダブルクォートでくくると ~/Desktop/foo/* と表示されてしまいます でも空白の入ったパスを渡したいときはダブルクォートでくくらないといけませんよね?どうすればいいですか ${1}/*を"${1}/*"としても"${1}"/*としてもうまくいきませんでした
- 21 名前:名無しさん@お腹いっぱい。 mailto:sage [2015/08/23(日) 22:25:01.69 .net]
- >>19
チルダがクォートされているかどうかで違う $ echo ~/Desktop/foo /home/hoge/Desktop/foo $ echo "~/Desktop/foo" ~/Desktop/foo
|

|