-
シェルでは変数を使用できません。次のように名前付き変数に依存するスクリプトがあるので、それを使用する方法はありますか?
$export a-b=c
-bash: export: `a-b=c': not a valid identifier
$export a_b=c
1つ目は与えられたエラーを発生し、2つ目は正常に動作します。
答え1
-
私は変数名の入力を許可するBourneスタイルのシェルを見たことがありません。 ASCII文字(大文字と小文字は関係ありません)_
と数字のみがサポートされており、最初の文字は数字にはできません。
プログラムにシェルの制限と一致しない環境変数が必要な場合は、env
このプログラムから始めてください。
env 'strange-name=some value' myprogram
一部のシェル(例:現代ダッシュ、mksh、zsh)環境で嫌いな名前の変数を削除します。 (シェルショック人々は環境変数名にもっと注意を払うので、時間の経過とともに制限が緩むよりも厳しくなる可能性があります。 )したがって、名前に特殊文字を含む変数をプログラムに渡す必要がある場合は、間にシェルなしで直接渡します(動作する場合もenv 'strange-name=some value' sh -c'…; myprogram'
動作しない場合もあります)。
答え2
間接参照を使用して、ハイフンで連結された変数にアクセスできます。
$ env 'my-hyphenated-variable=hello' /bin/bash
$ name='my-hyphenated-variable'
$ echo ${!name}
hello
答え3
Bashでは不可能です。
~から定義マニュアルページのセクションbash
:
名前は英数字とアンダースコアで構成される単語で、英数字またはアンダースコアで始まります。識別子とも呼ばれます。
~からパラメータマニュアルページのセクションbash
:
パラメータは値を格納するエンティティです。名前、数字、または以下の特殊パラメーターにリストされている特殊文字のいずれかです。変数は名前で表されるパラメータです。
答え4
ダッシュ(-
)文字は改行文字であり、変数名の一部としては許可されません。引用された変数を使用してこれをハッキングする方法がありますが、構文解析には本当に問題があります。 bash変数名に関して特別な意味を持つ他の文字、特に中かっこ、括弧、演算子文字、引用符があります。 (例えば{}()=+-&'"
等)
実際にスクリプトを作成するには、別のパラダイムを見つける必要があることを提案します。他の言語では、「変数変数名」という概念について少し疑問があるかもしれません。これは通常、シェルスクリプトでは良い考えではありません。
この内容を編集したり、状況や達成したいことについての詳細を含む新しい質問をしたりすると、スクリプトを書くための良い方法を提案できます。