• ベストアンサー

シェルスクリプト

bashで、変数を以下のコマンドで読み取りにした後、 読み取り専用が解除できなくなりました。 readonly TEST=hoge 解除しようとして試したコマンド declare +r TEST readonly -n TEST typeset +r TEST 読み取り専用を解除するには、どういったコマンドを打てばよろしいでしょうか?

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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 を使って読み込み専用属性を消すことはできません。 ということで、その記事を書いた方の勘違いです。

sap_linux
質問者

お礼

ありがとうございます。 勉強になりました。

その他の回答 (3)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.3

なぜそんなサイトを参考にしているのかわかりませんが、解除は出来ません。 本家のマニュアルを読む限り、+オプションはaとrについては無効であると記述されています。

参考URL:
http://www.gnu.org/software/bash/manual/bash.html
sap_linux
質問者

お礼

ありがとうございます。 勉強になりました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

出来ないはずです。出来たらreadonlyの意味が無い。

sap_linux
質問者

お礼

お返事ありがとうございます。 ただ、以下のサイトではできるようなことが書かれてありました。 http://merry.whitesnow.jp/SEMICMD/SECTION6/section6_7.html read onlyとした場合は後からその変数に値を設定することは出来ませんので、宣言時に値を与えておきます。また、read onlyの解除は「+r」オプションで再宣言を行えば可能です。

  • ky072
  • ベストアンサー率60% (85/140)
回答No.1

絶対に解除できないと思いますよ。 だからこそreadonlyの意味があります。 readonlyは、 「変数を読み取り専用として保護する」というより、 「絶対に上書きや削除ができない変数を定義する」というイメージです。

sap_linux
質問者

お礼

お返事ありがとうございます。 ただ、以下のサイトではできるようなことが書かれてありました。 http://merry.whitesnow.jp/SEMICMD/SECTION6/section6_7.html read onlyとした場合は後からその変数に値を設定することは出来ませんので、宣言時に値を与えておきます。また、read onlyの解除は「+r」オプションで再宣言を行えば可能です。

関連するQ&A