bash シェルで $() と ${}、および $(()) と (()) を区別する方法

王林
リリース: 2024-02-15 10:40:25
転載
931 人が閲覧しました

bash shell 中如何区别 $()和${}和$(())和(())

$() と ${} の使用法:

bash シェルでは、コマンドの置換に $( ) と ` ` (バックティック) が使用されます。また、$() はどのシェルでも使用できます。bash2 を使用する場合は問題ありません...

${ }を見てください...実際には変数の置換に使用されます。一般に、$var と ${var} の間に違いはありません。ただし、 ${ } を使用すると、変数名のスコープをより正確に定義できます。

ここでは、いくつかの例を使用して、${ } の特殊な関数のいくつかを説明します。

変数を次のように定義するとします。

file=/dir1/dir2/dir3/my.file.txt

${ } を使用して相互に置換し、異なる値を取得できます:

${file#*/}: 最初の / と左側の文字列を削除します: dir1/dir2/dir3/my.file.txt

${file##*/}: 最後の / と左側の文字列を削除します: my.file.txt

${file#*.}: 最初の . とその左側の文字列を削除します: file.txt

${file##*.}: 最後の . と左側の文字列を削除します: txt

${file%/*}: 最後の / と右側の文字列を削除します: /dir1/dir2/dir3##​​

#${file%%/*}: 最初の / と右側の文字列を削除します: (null 値)

${file%.*}: 最後の . と右側の文字列を削除します: /dir1/dir2/dir3/my.file

${file%%.*}: 最初の . と右側の文字列を削除します: /dir1/dir2/dir3/my

記憶方法は次のとおりです:
#は左側を削除することです(#は評価プレートの$の左側にあります)

% は右側を削除することを意味します (% はディスク上の $ の右側にあります)

単一のシンボルが最小一致であり、2 つのシンボルが最大一致です。

${file:0:5}: 左端の 5 バイトを抽出します: /dir1

${file:5:5}: 5 バイト目の右側から連続する 5 バイトを抽出します: /dir2

変数値の文字列を置き換えることもできます:

${file/dir/path}: 最初のディレクトリを path:/

に置き換えます。

パス1/ディレクトリ2/ディレクトリ3/my.file.txt

${file//dir/path}: すべてのディレクトリを path:/

に置き換えます。

パス1/パス2/パス3/my.file.txt

${ } を使用すると、さまざまな変数の状態 (未設定、null 値、null 以外の値) に値を割り当てることもできます。

${file-my.file.txt}: $file が設定されていない場合は、戻り値として my.file.txt を使用します。 (NULL 値と非 NULL 値は処理されません)

${file:-my.file.txt}: $file が設定されていないか空の場合、戻り値として my.file.txt を使用します。 (null 以外の値は処理されません)

${file my.file.txt}: $file が null 値または null 以外の値に設定されている場合、my.file.txt が戻り値として使用されます。 (未設定の場合は何も処理しません)

${file: my.file.txt}: $file が空でない値の場合、戻り値として my.file.txt を使用します。 (設定がない場合や空の場合は処理を行いません)

${file=my.file.txt}: $file が設定されていない場合は、my.file.txt を戻り値として使用し、$file を my.file.txt に割り当てます。 (NULL 値と非 NULL 値は処理されません)

${file:=my.file.txt}: $file が設定されていないか空の場合、戻り値として my.file.txt を使用し、$file を my.file.txt に割り当てます。 (null 以外の値は処理されません)

${file?my.file.txt}: $file が設定されていない場合は、my.file.txt を STDERR に出力します。 (NULL 値と非 NULL 値は処理されません)

${file:?my.file.txt}: $file が設定されていないか空の場合、my.file.txt を STDERR に出力します。 (null 以外の値は処理されません)

上記の理解は、未設定、null、および非 null の 3 つの代入状態を明確に区別する必要があるということです。

一般的に、: は null に関係します。: が含まれていない場合、null は影響を受けません。: が含まれている場合、null も影響を受けます。

また、${#var} は変数値の長さを計算できます:

/dir1/dir2/dir3/my.file.txt がちょうど 27 バイトであるため、

${#file} は 27 を取得できます...

$(()) 目的:

整数演算に使用されます。

bash では、$(( )) の整数算術記号はおおよそ次のとおりです。

- * /: それぞれ「加算、減算、乗算、除算」。

%: 剰余演算

& | ^ !: それぞれ「AND、OR、XOR、NOT」演算。

###例:###

wangnc>a=5;b=7;c=2;

wangnc>エコー $a $b

5 7

wangnc>エコー $(( a b*c))

19

wangnc>エコー $(((a*b)/c))

17

wangnc>エコー $(($a $b*$c))

19

ワング>

$(( )) 内の変数名は、次のように $(( )) の前に $ 記号を追加するか、$ 記号を付けなくても置き換えることができます。

$(( $a $b * $c)) は 19

の結果も取得できます。

さらに、$(( )) は、異なるキャリー番号 (2 進数、8 進数、16 進数など) を使用して演算を実行することもできますが、出力結果はすべて 10 進数です。

echo $((16#2a)) 結果は 42 (16 進数から 10 進数へ)

###(())の用法:###

実際には、(( )) を使用するだけで変数値を再定義したり、テストを行ったりすることもできます。

a=5; ((a )) $a は 6

として再定義できます

a=5; ((a--)) の場合、a=4

a=5; b=7; ((a (( )) に使用される一般的なテスト記号は次のとおりです。

<:>:

より大きい

<=: 以下 >=:

以上

==:

に等しい

!=:

と等しくない

以上がbash シェルで $() と ${}、および $(()) と (()) を区別する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:linuxprobe.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!