• ベストアンサー

${parameter:-word} と ${parameter:=word} の違い

bashのパラメータ展開で ${parameter:-word} と ${parameter:=word} の違いが何なのかよく分らないのですが、何が違うのでしょうか? http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 :-の方は、parameterの値が変わりません。:=は変わります。どちらもparameterに既に値が入っている場合は何も起こりません。  別の言い方をすると、:=の方はこの後bashが(子プロセスとして)起動するプロセスの環境変数にも$parameterがwordになりますし、:-はなりません。:=は何らかのプログラムを起動するスクリプト内で空っぽならデフォルト値を設定するというような用途に使用します。  以下、bashですけど$が出てきまくると紛らわしいのでプロンプトを%とします。 % echo ${SAMURAI:=LAST} LAST % echo ${DORA:-YAKI} YAKI % echo $SAMURAI LAST ←さっきのでSAMURAIにLASTが代入された % echo $DORA    ←さっきのでDORAにYAKIが代入されていない %

template_i
質問者

お礼

さっそくご回答いただきまして、ありがとうございます。 違いが分りました! どうもありがとうございました!

関連するQ&A

  • #defineの使い方について

    http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strdup.3.html の書式のところに #define _GNU_SOURCE という一文があるのですが、これは何をしているのでしょうか。 #defineはマクロを定義するために使用するのは、 知っています。#define _GNU_SOURCEは _GNU_SOURCE のあとに 何も書かれていないのが不自然です。

  • Linuxのperrorのpは何の意味?

    Linuxのperrorのpは何の意味? プログラミングをしていて気になりました。 perror http://www.linux.or.jp/JM/html/LDP_man-pages/man3/perror.3.html

  • 初期化パラメータはOSによって違いがありますか?

    Redhat Enterprise Linux 5.2 でのOracle10gR2の初期化パラメータの調査を依頼されたのですが、 手元に Redhat Enterprise Linux 5.2 のインストールされたマシンが無いので、 WindowsにOracle10gR2をインストールして調査しようと思っています。 そこで質問なのですが、Oracleの初期化パラメータは、OSによって 違いがあるのでしょうか? 私は違いが無いと想像しているのですが、どなたかご教示いただけませんか。

  • Linuxのカーネルパラメータについて

    Linux(RedHatLinux/CentOSを想定)で,カーネルパラメータの一覧を見るにはsysctl -aですが, そのカーネルパラメータそれぞれが何を意味するかを示した,ドキュメント or Webページ or 書籍 etc.はありませんでしょうか? 本質問の背景ですが,RHEL6など比較的最近リリースされたOSバージョンにて 新しく作られたカーネルパラメータの意味を調べたいです. インターネット上ではあまりドキュメントは見つからなかったので,最悪ソースコード等を追うつもりですが,もっと簡単に調べられる方法がありましたらご教授ください.

  • Windowsでインターバル・タイマーの値を取得または設定する方法

    Linuxで以下の関数を使えば、指定した時間にシグナルとして 指定した関数を呼ぶことが可能ですが、Windowsでは どのようにしたらよいのでしょうか? OsはWindowsXP32bitです。 参考:http://www.linux.or.jp/JM/html/LDP_man-pages/man2/getitimer.2.html #include <sys/time.h> int getitimer(int which, struct itimerval *value); int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

  • LinuxにLHAという圧縮コマンドがありますが、パラメータがわかりません。

    大昔にDOSでLHA arxnmwh:\ 作成ファイル 対象ディレクトリ で良く使っていましたので体で覚えていました。 最近Linuxを使うようになって、lhaコマンドでパラメータがわからなくなりました。変更でもあるのでしょうか? わりたいことは、あるディレクトリ以下のファイルとディレクトリを経過表示なしで、圧縮かけたいのと、 展開の際のパラメータです。 よろしくお願いします。

  • Windowsが起動しなくなった。

    Windowx XP(SP3), Vine Linuxを共存させているのですが、 GNU GRUBの設定をする前にVine Linuxを削除してしまいました。 以後、PCを起動すると -------------------------------- GNU GRUB version 0.97 [Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> -------------------------------- というメッセージの画面になります。 WindowsXPを立ち上げ、GRUBの再設定を行いたいのですがどうすればよいのでしょうか。 ご存知の方、良ければ回答よろしくお願いします。

  • linux日本語入出力の仕組み

    linuxで外部からssh接続してbashでlsとかmanとかを日本語で見る場合、 また、 linuxで外部からssh接続してbashに日本語を入力する場合、 どのプログラム・モジュールの設定を確認する必要がありますか? どうやって確認すればいいですか? 実際の問題は、Debian lennyでputtyでsshログイン中に日本語入出力がうまくできないことです。 bashの環境変数はLANG=jp_JP.UTF-8です。utf-8が使いたい文字コードです。 googleなどで検索すると、 puttyjp(ISO2022対応?)を使え bash起動時に set kanji-code sjis set convert-meta off set meta-flag on set output-meta on を設定せよ と出てきますが、うまくいきませんでした。 putty - sshd - /dev/pts/0 - /dev/pty - bash - ls/man のような流れでしょうか?誰が日本語対応していればいいんでしょうか?設定で気にする項目は? っていうのがなかなか見えてこなくてヒントいただけたら幸いです。

  • unix(FreeBSD)でディレクトリ容量計算すると2倍になる

    unixコマンドの"du -s"にてディレクトリ内全容量を調べています。 TeraTermにてコマンドを直接たたくと正しい値が出るのですが、PHPのexec()関数にて同様のことを やらせると結果が2倍になります。 サーバーがFreeBSDなのでバグ?と思いましたが、 参考)http://www.linux.or.jp/JM/html/gnumaniak/man1/du.1.html ←「バグ」と書いてある項目 コマンドたたきで正しい値が出るわけですから納得いきません。 この症状についておわかりになる方、いらっしゃいましたら助言をお願いできますでしょうか。 <環境> OS:    FreeBSD 6.2(レンタルサーバー) Apache:  1.3.34 PHP:    5.2.8

  • パケット通信時のIPヘッダの取得方法について

    RedHat Linux9上で、g++3.2を使用して、ソケット通信の プログラムを作成していますが、UDPやTCPパケットを受信した際に 各パケットのIPヘッダを取得したいのですが、どのように行えばよいのでしょうか? RAWソケットを使用すればできるかとも思ったのですが、下記のURLに 「IPPROTO_RAW 経由でのあらゆる IP プロトコルの受信は、 raw ソケットを用いては行えない。」と書かれています。 http://www.linux.or.jp/JM/html/LDP_man-pages/man7/raw.7.html 上記のURLには、下記のようにも書かれていました。 packetソケットを使用しなければ実現できないのでしょうか? もし、そうならばpacketソケットのサンプルがありましたら、 教えていただけないでしょうか。 「IPPROTO_RAW ソケットは送信専用である。もしどうしてもすべての IP パケットを受信したい場合は、 packet(7) ソケットを ETH_P_IP プロトコルで用いること。」