変数拡張では、変数の前の「#」演算子はどのような役割を果たしますか?

変数拡張では、変数の前の「#」演算子はどのような役割を果たしますか?

以下は端末で実行したコードです。

[root@idm ~]# x="$(date +%d%m%y)"    
[root@idm ~]# echo $x
270217
[root@idm ~]# echo ${#x}
6

誰かが出力がこの理由を理解するのを助けることができますか6#本質的に、変数に対してどのようなことが行われますか?

答え1

パラメータの長さ、配列の要素数、または位置パラメータの数を返すパラメータ拡張。

シェルマニュアルをお読みください。以下はbashマニュアルから抜粋した内容です。

${#parameter}

値の文字長がparameter置き換えられます。。またはのparameter場合、置換された値は位置引数の数です。配列名で下付き文字がまたは場合、置換された値は配列内の要素の数です。インデックス配列名で下付き文字が負の場合、数値は引数の最大インデックスより大きい 1 に基づいて解釈されるため、負のインデックスは配列の末尾で逆に計算され、インデックス -1 は最後の要素を表します。 。*@parameter*@parameter


そして、お願いしますインタラクティブなルートシェルで作業する習慣を持ち上げないでください。これはせいぜい危険で無謀なことです。sudo注意して使用し、高い権限が必要な場合にのみ使用してください。bashルート以外の一般ユーザーであれば、確かに試してみてください。

ここ数年、私は手動で個々のユーザーを追加するためにインタラクティブなルートシェルだけを使用しました。これは2分の仕事でした。いいえ#そのコンピュータでプロンプトを再確認する必要があります。

答え2

この#演算子は変数の長さを返します。あなたの場合、可変長xは6です。

これを見てくださいパラメータの置換より多くの情報を知りたいです。

関連情報