だから私は空の文字列変数を最初の引数として受け取り、2番目の引数として文字を受け取るbashにこの関数を持っています。
function check_cases {
case $2 in
r) $1=$(echo "$1 Read");;
w) $1=$(echo "$1 Write");;
x) $1=$(echo "$1 Execution");;
esac
}
文字列変数を連結するさまざまな方法を試しましたが、常に次のように表示されます。
=: command not found
=演算子について。関数内にローカル文字列変数を作成して消去します。
local var=""
文字変数として渡します。
check_cases "$var" "$char"
現在の状況とこの問題を解決する方法を知りたいです。
答え1
何かしようとしているようです。参照として渡すタイプ機能。
これは実際にはスクリプトには適していませんbash
。私たちはできる徐々に進むコマンドで動作しますeval
が、危険な動作(文字列に含まれるコマンドの評価)が多いため、お勧めできません。
存在するこれたとえば、コードは次のようになります。
function check_cases {
case $2 in
r) eval $1=\"\$$1 Read\" ;;
w) eval $1=\"\$$1 Write\" ;;
x) eval $1=\"\$$1 Execution\" ;;
esac
}
check_cases var r
check_cases var w
check_cases var x
echo $var
代わりに、一般的に使用する方が良いです。値として渡す意味論: 必要な値を返し、呼び出し側に変数を追加します。
例えば
function check_cases {
case $1 in
r) echo " Read" ;;
w) echo " Write" ;;
x) echo " Execution" ;;
esac
}
var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"
echo $var
答え2
何を達成したいのかは明確ではありませんが、とにかく...
まず、割り当て構文は次のとおりです。
$val=value
しかし、
val=value
それでも
1=value
変数名は数字で始めることができないため、機能しません。
位置パラメーターに値を指定するには、次のようにします。
function check_cases {
case $2 in
r) append=' Read';;
w) append=' Write';;
x) append=' Execution';;
esac
set "$1""$append" "$2" # notice no space between "$1" and "$append"
echo "$@" # print all parameters
echo Number of parameters: $#
}