7

「64ビット」(つまり、先頭に数字が付いている)という環境変数をbashに設定する必要があります。ただし、bash変数名では、先頭に数字が付いた変数は使用できません。bashを呼び出すときに設定する方法を知っています:

env 64bit=1 /usr/bin/bash

ただし、新しいシェルを起動するのではなく、現在実行中のシェルで変更する方法を探しています。また、cshでは変数を数字で始めることができることも知っていますが、bashを使用する必要があります。

これを達成する方法はありますか?

4

2 に答える 2

8

bashインタープリターをバイパスし、bash内部関数を使用して変数を直接定義することもできます。

$ gdb --batch-silent -ex "attach $$"                              \
    -ex 'set bind_variable("64bit", "1", 0)'                      \
    -ex 'set *(int*)(find_variable("64bit")+sizeof(char*)*5) = 1' \
    -ex 'set array_needs_making = 1'

$ env | grep 64
64bit=1
于 2013-03-19T21:37:43.033 に答える
1

人々が指摘するように、Bashは数字で始まる変数を許可していません。ただし、認識されない環境文字列は外部プログラムに渡されます。そのため、変数はに表示されますが、には表示されenvませんset

回避策として、次のような有効な名前を使用して、_64bit実行するコマンドに無効な変数名を自動的に挿入できます。

#!/bin/bash    
# Setup for injection hack
original=$PATH
PATH="/"
command_not_found_handle() {
  PATH="$original" env "64bit=$_64bit" "$@"
}

# Your script and logic
_64bit="some dynamic value"

# This verifies that '64bit' is automatically set
env | grep ^64bit

この特定のメソッドは、相対パス名または絶対パス名を使用する場合ではなく、$PATHを介して呼び出す場合にのみ機能することに注意してください。

パス名で呼び出す場合は、代わりにPATHを変更して名前で呼び出すことを検討してください。

于 2013-03-19T20:56:05.097 に答える