シェルスクリプトでファイル名のワイルドカード展開を抑制する方法

このQ&Aのポイント
  • Cygwinのbashスクリプトで、ワイルドカード付き文字列を関数引数に渡す際に、展開を抑制する方法について質問です。
  • 現在のCygwinでは、ワイルドカードを「*」のまま渡しても展開されてしまうため、展開させずに文字列そのものを表示させる方法が知りたいです。
  • 過去のCygwinでは展開が抑制されていましたが、最近のバージョンでは挙動が変わってしまったため、対処法が分からない状況です。
回答を見る
  • ベストアンサー

シェルスクリプトで、ファイル名のワイルドカード展開を抑制する方法は?

Cygwinのbashスクリプトの記述方法について質問です。「*.zip」等のワイルドカード付き文字列を関数引数に渡す時、「*」のまま渡す(展開を抑制する)方法はあるでしょうか? 例えば、次のbashスクリプトコードを実行します。 f(){ echo $1 } f *.zip すると、*.zipに合致するファイル名が全て表示されてしまいます。これを「*.zip」と表示させる(*を展開させない)方法を知りたいです。''や""で囲んで試みましたが、ダメでした。 数ヶ月前のCygwinでは展開されなかったのですが、最近のCygwinで挙動が変わってしまいました。そこで対処法がどうしても分からず質問させて頂きました。どうぞ宜しくお願い致します。 環境:WinXP Pro.、Cygwin(sh.exeのバージョンは3.2.33)

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

驚異的な方法では set -f 普通は f "*.zip" でいいはずだけど f() の方も echo "$1" にしないとダメだったかな?

simple0123
質問者

お礼

有難うございます。成功しました。関数内部でも"が必要、という事でした。因みに3.2.39(20)だと何故かこの対処をせずとも期待通りの動きでした。

その他の回答 (2)

noname#108740
noname#108740
回答No.2

「\*」

simple0123
質問者

お礼

有難うございます。が、残念乍ダメでした...。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

クォティションでくくって「文字列」として渡す くらいじゃないかな。

simple0123
質問者

お礼

有難うございます。が、質問文にも書いた通り既に試行済です。

関連するQ&A

  • shのシェルスクリプトの演算方法について・・・

    bashのシェルスクリプトについてもお聞きしたのですが、 その方法では演算ができない!ということになってしまいました・・・ こういうちょこっとしたところが違うのが嫌です・・・↓ bashの場合は ---------- bash$ a=1 bash$ a=$(( $a + 1 )) bash$ echo $a 2 ---------- となったのですが、shではエラーが出てしまいました・・・ また、shのスクリプトもbashのスクリプトもシェルスクリプトと呼ぶのでしょうか?

  • telnet 110 のシェルスクリプトについて

    linux初心者です。 telnet localhost 110 の確認スクリプトを作成したいのですが、調べた結果以下のスクリプトを作成しましたがうまく動作してくれません。 お分かりになる方ご教授ください。 test.sh #!/bin/bash sleep 1; echo user $1 sleep 1; echo pass $2 sleep 1; echo stat sleep 1; echo quit test1.sh #!/bin/bash sh ./test.sh | telnet localhost 110 ./test1.sh hogeuser hogepass 同じアカウントの場合$1 $2の部分にuser名 パスワードを記入すればいいのは分かるのですが、毎回アカウント・パスワードが違うため引数に渡したいと思います。 よろしくお願いいたします。

  • シェルスクリプトで引数をファイル名に使うには?

    シェルスクリプトでutfとshift-jisの変換を行いたいと思ってます。 ファイル出力のところでファイル名を$1と引数にするとうまくいきません。(変換されてなかったり、空ファイルできたり) >! $1 ではなく $1.xx とかにするとうまくいきます。 どうしたら引数のファイル名に出力できるでしょうか? #!/bin/sh if [ $2 = 'us' ] then cp $1 $1.utf8 iconv -f UTF-8 -t SHIFT-JIS $1 >! $1 echo "$1 UTF-8 => SHIFT-JIS [ OK ]" elif [ $2 = 'su' ] then cp -f $1 $1.sjis iconv -f SHIFT-JIS -t UTF-8 $1 >! $1 echo "$1 SHIFT-JIS => UTF-8 [ OK ]" else echo "$1をコンバートできませんでした。" fi

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。

  • シェルスクリプトで$RANDOMの値が表示できません

    #!/bin/sh DATA=$RANDOM echo $DATA としたとき,何も出力されないでスクリプトが終了してしまいます.bashモードでコンソールから echo $RANDOM とやれば乱数は表示されます. どのようにすれば表示させることができるのでしょうか?

  • シェルスクリプト 引数の引渡しについて

    こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。

  • 簡単なシェルスクリプトを見てください。

    次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

  • linuxのシェルスクリプト

    linuxのシェルスクリプト シェルスクリプトの質問をどこですればよいのかよくわからないので、ここでさせていただきます。 最近、始めてシェルスクリプトの勉強を始めました。 スクリプトに渡す引数を出力したいと思い、 echo $1 echo $2 echo $3 とかくと、スクリプトに渡した引数が出力されます。 これを、for文で書くと for i in 1 2 3 do echo $i done とねるのですが、これでは1,2,3が出力されてしまいます。 どうなおしたらいいのでしょうか? よろしくお願いいたします。

  • msys(cygwin)で、シェルスクリプトのcdが動かないのは何故?

    msys(又はcygwin)で、シェルスクリプトに書いたcdが働きません。その解決方法を伺っても宜しいでしょうか?具体的には、下のような状況です。 [シェルスクリプト内容] #!/bin/bash echo cd前 cd testdir # ↑testdirは既存。コマンドラインから手打ちすると機能する! echo cd後 [実行結果の表示] cd前 : No such file or directory cd後 [環境] ・WinXP + 最新全パッチ適用 ・msysとcygwinをインストール 以上 どうか宜しくお願い致します。

  • Cygwinのシェルスクリプトから、DOSのバッチファイルを起動できる?

    Cygwin(bash)で使うシェルスクリプトの中から、MS-DOSのバッチファイル(.bat)を起動できるでしょうか? 実験では不可能( Cygwin(bash)からcommand not found と言われてしまう)でした。が、もしかしたら裏技的にできる方法をご存知の方がいらっしゃるかと思い、質問させて頂きました。 以上どうぞ宜しくお願い致します。