- 締切済み
環境変数IFSについて
シェルスクリプトでテキストファイルを1行ずつcatで読み込みたいです。 そのため、IFSに¥nを設定して、 読み込み終わったら元に戻すようにしました。 そこで1点気になった事があります。 このシェルスクリプトが動いている間、 他のプロンプトでcatを叩いても1行ずつ読み込んでしまいますか? もしそうであるなら、このシェルスクリプトのプロセス内だけ、catで1行ずつ読み込むにはどうしたらよいのでしょうか。 どなたかご教示お願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
export コマンドでいわゆる環境変数として定義すればシェルを飛び越えてシステム全体に影響が及びます。 しかし、スクリプト内で単に IFS=$'\n' などとして定義をした場合には、そのシェル以下で有効になるにすぎず、システム全体には及びません。 なお、「1行ずつ読み込む」のは、 cat コマンドではなくて read コマンドのことではありませんか?
- h271015
- ベストアンサー率71% (62/87)
> このシェルスクリプトが動いている間、 > 他のプロンプトでcatを叩いても1行ずつ読み込んでしまいますか? > > もしそうであるなら、このシェルスクリプトのプロセス内だけ、catで1行ずつ読み込むにはどうしたらよいのでしょうか。 シェルスクリプトのコード内にIFSの指定をされていると思いますが、シェルスクリプトは起動時に新たにシェル呼び出しているので、シェルスクリプト内で設定されている各種変数もその新たに起動されたシェルの中でのみ有効になります。 ですので、質問者様のターミナル等で使っているシェルとはまた別なので、スクリプトの実行の有無にかかわらず、正常に出力されると思います。
- notnot
- ベストアンサー率47% (4900/10358)
IFSは環境変数ではありません。シェル変数です。 シェル変数や環境変数はプロセス毎の固有のデータです。 そもそも、cat は IFS と無関係です。何かの勘違いがあると思います。