C-Shell環境変数でのエラーの原因と対処法

このQ&Aのポイント
  • C-Shellで環境変数を設定する際に、括弧で変数を括る必要がある理由について説明します。
  • エラーメッセージ「Bad : modifier in $ ($).」が表示される原因と、正しい環境変数の設定方法について解説します。
  • C-Shellスクリプトで環境変数を設定する際には、変数の値を括弧で括ることで正しく動作します。括弧を付けずに変数を参照するとエラーが発生するため、注意が必要です。
回答を見る
  • ベストアンサー

cshellスクリプトの環境変数で "Bad : modifier in $" のエラー

C-Shellで環境変数を設定する場合の質問です。$HOGEに$HOGEAを追加しようとした場合、以下のように$HOGEを括弧で括る必要があるようで、そうしないと以下のようなエラーで怒られてしまいます。 これはどうしてなのでしょうか。 -------------------------- #! /bin/csh -f setenv HOGE aaa:bbb setenv HOGEA ccc setenv HOGE $HOGE:$HOGEA # OK setenv HOGE ${HOGE}:$HOGEA # NG -------------------------- <エラー> -------------------------- Bad : modifier in $ ($). --------------------------

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

変数名の後にコロンを付けてその後に修飾子を書くことが出来ます。(詳しくはman csh参照) 例えば、 setenv FOO /aaa/bbb/ccc echo $FOO:t で、ccc を表示 この構文になってしまうので、変数名の直後に修飾子指定でないコロンは書けません。 お書きのように変数名を{}で囲むか、コロンをエスケープするか。

tk_1980024
質問者

お礼

なるほど、すっきり理解できました。 どうもありがとう御座います。

関連するQ&A

  • bashでの変数の引渡し方法

    bashを使用するのが初めてなので教えてください。 shellscriptの中で変数を設定するのに共通変数設定用の子Shellを実行して変数を設定したいと思っていますが、うまく動きません。どのように設定したらいいのでしょうか。cshのときはsetenvでよかったのですが。。 親shell(hoge.sh) -------------- #!/bin/sh ./setenv.sh #変数設定用子Shell echo $USER exit 0 -------------- 子Shell(setenv.sh) -------------- #!/bin/sh USER="hoge" exit 0 -------------- 実行すると以下のようになります。 $./hoge.sh USER: not found

  • Pathの記述の仕方

    以下のようなパスの記述をしても問題ないでしょうか? /aaa/bbb/ccc/.../.../bbb/ccc/config.txt 理由としては、以下のシェルのようにconfigファイルを読み込むのに dirnameコマンドを使用して取得するためです。 このコマンドは、コマンドラインから実行する場合と、JOBNETなどの別プロセス(実行ディレクトリは別ディレクトリ)から実行される可能性があります。 Sample.csh #!/bin/csh set SHELL_PATH = `dirname $0` set APP_ROOT = ${SHELL_PATH}"/../.." setenv SERVER_INFO_FILE ${APP_ROOT}"/aaa/bbb/config.txt sample.exe ご回答宜しくお願い致します。

  • CSHの環境変数の設定

    CSHで外部で定義したconfigファイルから変数を読み込み そのシェル及び子シェル内で有効な変数として使用したのですが どのような方法がありますでしょうか? 以下の方法だと親シェルからでは子シェルで設定した変数が読み込めないため困っています。 config.csh #!/bin/csh -f setenv AAA aaa test.csh #!/bin/csh -f set APP_ROOT = `dirname $0` cd $APP_ROOT set CONFIG_FILE=$APP_ROOT"/config.csh" echo $AAA

  • cshで変数名の入れ子ができない

    こんなことをしたいと考えています。 --------------------- set aaa="bbb" set bbb="ccc" echo $aaa echo $bbb echo $($aaa) --------------------- 期待する実行結果としては、 --------------------- bbb ccc ccc --------------------- という感じです。 エラーになってしまうのですが、何かいい逃げ方はありませんか? cshでなくてshでも構いません。 よろしくお願いします。

  • 『存在するかどうか分からない』環境変数にcshで新しいパスを設定したい

    Linuxを利用しており、「『存在するかどうか分からない』環境変数に新しいパスを設定したい」のですが、うまくいきません。 言い方を変えると、対象の環境変数が存在しようが存在しまいが、うまくいくようにしたいのです。 具体的には、ログインシェルに tcsh を使用しているため、hogehoge.cshを作成し、/etc/csh/login.d/に入れました。hogehoge.cshの内容は以下のようになります。 #!/bin/csh setenv HOGEHOGEPATH /usr/lib/hogehoge:${HOGEHOGEPATH} ログインしてみると HOGEHOGEPATH: Undefined variable. といった内容のエラーが表示され、環境変数も設定されません。 shで設定する方法もありますがcshで良い書き方はないでしょうか。ご教示お願いいたします。

  • プロキシでエラーになり外部と通信できない

    お世話になります。 外部にあるサーバーとLAN内にあるPCとで通信しようとして失敗し、原因を辿って行ったところ、squidプロキシのログ上でエラーを見つけました。ステータスは400:Bad Request、接続先(ホスト名)が空欄状態です。 試しに、外部サーバーの名前解決の情報をPCのhostsに追記したところ、通信ができました。 ですが、外部サーバーのIPアドレスはいつ変更になるか分かりませんので、ホスト名での通信をしたいところです。それに、なぜホスト名だと通信できないのか分かりません。 以下が、通信できない際のプロキシのアクセスログです。 1377752231.225 0 192.168.AAA.AAA NONE/400 1060 CONNECT :443 - NONE/- - 以下が、hosts追記後に通信できた際のプロキシのアクセスログです。 1377752448.729 2854 192.168.AAA.AAA TCP_MISS/000 172 CONNECT BBB.BBB.BBB.BBB:443 - FIRST_UP_PARENT/192.168.CCC.CCC - hostsに追記した内容 BBB.BBB.BBB.BBB hoge.moge.com 192.168.AAA.AAAがLAN内にあるPC、 BBB.BBB.BBB.BBBが外部サーバーのIPアドレス、 hoge.moge.comが外部サーバーのホスト名、 192.168.CCC.CCCがプロキシの先にある社内セキュリティゲートウェイです。 hoge.moge.comは、ネット上にあるnslookupするサイトで、名前解決できることは確認しています。 お分かりになる方がいらっしゃいましたら、お力添え頂けますでしょうか。

  • Cシェルについて

    Cシェルについて #! /bin/csh ##! /bin/csh -vx setenv NOHUP '/usr/bin/nohup' set AAA_CSH = $NOHUP' XXX.sh file.txt &' ($AAA_CSH >> /dev/null) >>& err.log シェルスクリプトを作成して上記のとおりnohupでXXX.shを実行するように記述します。 エラーがあった場合、err.logに出力するように作成したつもりなのですが、 XXX.shがなかったとき、 「/usr/bin/nohup: XXX.sh:そのようなファイルまたはディレクトリはありません。」 と標準出力されてしまいます。 このエラーメッセージをerr.logに記述するようにしたいのですが、 どうしたらよいでしょうか? よろしくお願いいたします。

  • bshスクリプト で質問です。

    以下の内容のtmp.txtを aaa bbb ccc ddd eee fff 行末がbbbなら結合としたいです。 --希望結果-- aaa bbb ccc ddd eee fff この場合以下のスクリプトでうまくいかないのですが 原因を教えていただけますか? awk '{ gsub("bbb[\n]$","",$0); print }' tmp.txt OS、HP-UX11.0です。

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

    シェルスクリプトを勉強しています。 hoge.txt内で"AAA"という文字列を"BBB"という文字列を検索し下記のような処理を行いたいです。  (1)AAA・BBBともにある場合  →スクリプトを続行  (2)AAA・BBBともにない場合  →スクリプトを停止  (3)AAAしかない場合  →BBBがありませんというメッセージを流す    (4)BBBしかない場合  →AAAなしでスクリプトを続行しますというメッセージを流す   シンプルなやり方でいいので上記のようなことを行いたい場合、どのようにスクリプトを書けばいいのか教えてください。 よろしくお願いします。

  • c++のグローバル変数

    お世話になります c++のグローバル変数の使い方を教えていただけないでしょうか Visual Studio 2008を使用しております ------------abc.cpp------------- int AAA; BBB(){ AAA = 1; } abc::CCC(){ AAA = 2; } コンパイル(ビルド)ではエラーは出ないのですが、 BBBをコールした時は変数AAAに値をセットできるのですが、 abc::CCCをコールした時、AAAに値がセットできません、 ウォッチ等も「エラー:識別子'AAA'はスコープ外です」 となってしまいます。 補足 BBBはリンクしているライブラリ(修正不可)からコールされる為、 クラスに組み込む事が出来ません。