このエントリーをはてなブックマークに追加


コマンドの戻り文字列を変数に代入したい

コマンドを実行したときに表示される文字列を変数に代入する方法を以下に記します。
使用したシェルは、bashになります。


関連記事

バックくオート`で囲んで文字列を取得する

以下の構文により、バッククォートで囲まれたコマンドの出力文字列は左辺の変数に代入されます。

変数名=`コマンド`

実際に実行した例を以下に記します。

  • lsコマンドのありかをwhichで探し、返却された文字列をLSPATH変数に代入しています。
    LSPATHをechoコマンドで確認するとlsのパスが格納されていることが確認できます。
    sakura@ubuntu:~$ LSPATH=`which ls`
    sakura@ubuntu:~$ echo $LSPATH
    /bin/ls
  • ディレクトリ一覧なども取得できます
    sakura@ubuntu:~$ DIRS=`ls -1`
    sakura@ubuntu:~$ echo $DIRS
    Desktop Downloads Pictures examples.desktop ダウンロード テンプレート デスクトップ 
    ドキュメント ビデオ ピクチャ ミュージック 公開

$(コマンド)で文字列を取得する

上記のバッククォートと同じ動作になります。

変数名=$(コマンド)

実際に実行した例を以下に記します。

  • dateコマンドのありかをwhichで探し、返却された文字列をDATEPATH変数に代入しています。
    sakura@ubuntu:~$ DATEPATH=$(which date)
    sakura@ubuntu:~$ echo $DATEPATH
    /bin/date
  • ログインユーザ一覧を取得してみます。
    sakura@ubuntu:~$ who
    sakura   pts/3        2016-06-06 10:58 (192.168.106.1)
    sakura   pts/9        2016-06-06 11:28 (192.168.106.1)
    sakura@ubuntu:~$ WHO=$(who)
    sakura@ubuntu:~$ echo $WHO
    sakura pts/3 2016-06-06 10:58 (192.168.106.1) sakura pts/9 2016-06-06 11:28 (192.168.106.1)
    2行が1行になって格納されています。
     
    このような場合、スペースもありますし1行になってしまっています。
    forでループしたい場合は、以下の資料が参考になると思います。
  • スペースが含まれる文字列を1行として扱う方法
  • スペース区切りの文字列を配列に格納する方法


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-06-06 (月) 21:33:36