- ベストアンサー
シェルスクリプト
bashで、変数を以下のコマンドで読み取りにした後、 読み取り専用が解除できなくなりました。 readonly TEST=hoge 解除しようとして試したコマンド declare +r TEST readonly -n TEST typeset +r TEST 読み取り専用を解除するには、どういったコマンドを打てばよろしいでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
意見がわかれた、より原典に近いもので確認しましょう。 http://www.gnu.org/software/bash/manual/bashref.html#index-declare より declare declare [-aAfFilrtux] [-p] [name[=value] …] Declare variables and give them attributes. (略) Using ‘+’ instead of ‘-’ turns off the attribute instead, with the exceptions that ‘+a’ may not be used to destroy an array variable and ‘+r’ will not remove the readonly attribute. 和訳も見てみます。 http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html より。 declare [-aAfFgilrtux] [-p] [name[=value] ...] typeset [-aAfFgilrtux] [-p] [name[=value] ...] 変数を宣言したり、変数に属性を与えたりします。 (略) `-' ではなく `+' を使うと属性を消します。 ただし例外として、+a を使って配列変数を破棄することはできず、 +r を使って読み込み専用属性を消すことはできません。 ということで、その記事を書いた方の勘違いです。
その他の回答 (3)
- teketon
- ベストアンサー率65% (141/215)
なぜそんなサイトを参考にしているのかわかりませんが、解除は出来ません。 本家のマニュアルを読む限り、+オプションはaとrについては無効であると記述されています。
お礼
ありがとうございます。 勉強になりました。
- notnot
- ベストアンサー率47% (4900/10358)
出来ないはずです。出来たらreadonlyの意味が無い。
お礼
お返事ありがとうございます。 ただ、以下のサイトではできるようなことが書かれてありました。 http://merry.whitesnow.jp/SEMICMD/SECTION6/section6_7.html read onlyとした場合は後からその変数に値を設定することは出来ませんので、宣言時に値を与えておきます。また、read onlyの解除は「+r」オプションで再宣言を行えば可能です。
- ky072
- ベストアンサー率60% (85/140)
絶対に解除できないと思いますよ。 だからこそreadonlyの意味があります。 readonlyは、 「変数を読み取り専用として保護する」というより、 「絶対に上書きや削除ができない変数を定義する」というイメージです。
お礼
お返事ありがとうございます。 ただ、以下のサイトではできるようなことが書かれてありました。 http://merry.whitesnow.jp/SEMICMD/SECTION6/section6_7.html read onlyとした場合は後からその変数に値を設定することは出来ませんので、宣言時に値を与えておきます。また、read onlyの解除は「+r」オプションで再宣言を行えば可能です。
お礼
ありがとうございます。 勉強になりました。