Linux における $ 記号の基本的な使い方のまとめ

Linux における $ 記号の基本的な使い方のまとめ

Linuxバージョン: CentOS 7

[root@azfdbdfsdf230lqdg1ba91 ~]# cat /etc/redhat-release
CentOS Linux リリース 7.4.1708 (コア)
[root@azfdbdfsdf230lqdg1ba91 ~]# uname -a
Linux azfdbdfsdf230lqdg1ba91 3.10.0-693.2.2.el7.x86_64 #1 SMP 火曜 9月12日 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[ルート@azfdbdfsdf230lqdg1ba91 ~]#

$ シンボル 草 セット

ターゲット

$ 記号は Linux システムで多くの重要な役割を果たします。特に、$ があらゆる場所で見られる bash スクリプトを記述するときに重要な役割を果たします。常に変化し、多様であるため、習得して使用すること、特に覚えることは困難です。そこで、その使い方をまとめてコレクションを作成しましょう。これらをマスターしても面接で聞かれることはないので、給料が大幅に上がるわけではありませんが、仕事の効率が向上し、視野が広がります。

現時点で私が知っている $ の用途としては、$、"$"、$0 $1 $n、$#、$@ $*、$?、$()、${}、${#}、$[]、$-、$!、$$ などがあります。追加!$、!!、順番に詳細な説明

$ 変数の値を取得

$は変数の値を取得できる

[root@izbp10lqlgy2g31s41bt94z ~]# a=1
[root@izbp10lqlgy2g31s41bt94z ~]# エコー $a
1

変数の値を取得するには、「$」を使用するのが最適です。

なぜこの提案があるのでしょうか? 例をご覧ください

[root@izbp10lqlgy2g31s41bt94z ~]# echo a = $a の値を取得します
a = 1 の値を取得します
[root@izbp10lqlgy2g31s41bt94z ~]# echo "a = $a の値を取得"
a = 1 の値を取得します

ご覧のとおり、二重引用符の有無にかかわらず、効果は同じであるようです。まだ結論を出さずに、読み進めてください。

[root@izbp10lqlgy2g31s41bt94z ~]# a="私はスカイラーです"
[root@izbp10lqlgy2g31s41bt94z ~]# [ $a == "私はスカイラーです" ]
-bash: [: 引数が多すぎます

ここで、[]は条件判定記号であり、testコマンドと同等です。変数 a の値が「i am skyler」に等しいかどうかを判断しようとしています。
では、なぜエラーが報告されるのでしょうか。これは、 [ $a == "i am skyler"] という形式で記述された変数が、解析後に [ i am skyler == "i am skyler" ] になるためです。明らかに、この判定式では等号の両側の文字列を判定できません。必要なのは、 [ "i am skyler" == "i am skyler" ] という比較です。だから、私たちは通常「

[root@izbp10lqlgy2g31s41bt94z ~]# [ "$a" == "私はスカイラーです" ]
[root@izbp10lqlgy2g31s41bt94z ~]# echo $?
0

ダブルクォーテーションを使用するだけです。ここでは、$? が事前に使用されており、前のコマンドの実行結果が正しいかどうかを判断することを意味します。出力結果では、0 は実行が成功したことを示し、0 以外の値はエラーを示します。

${}は変数の境界を区別し、どの変数値を取るかをプログラムに明確に伝えるために使用されます。

次の例では、{}を追加しないと、プログラムはab $abcのどれ​​が変数であるかを判断できず、解析できません。

[root@izbp10lqlgy2g31s41bt94z ~]# echo "a = $abc の値を取得"
a の値を取得する =
[root@izbp10lqlgy2g31s41bt94z ~]# echo "a = ${a}bc の値を取得"
a = 1bcの値を取得します
[root@izbp10lqlgy2g31s41bt94z ~]#

${#}変数値の長さを取得する

[root@izbp10lqlgy2g31s41bt94z ~]# echo "a = ${#a} の長さを取得"
aの長さを取得 = 1
[root@izbp10lqlgy2g31s41bt94z ~]# a=11111
[root@izbp10lqlgy2g31s41bt94z ~]# echo "a = ${#a} の長さを取得"
aの長さを取得 = 5
[root@izbp10lqlgy2g31s41bt94z ~]# a=スカイラー
[root@izbp10lqlgy2g31s41bt94z ~]# echo "a = ${#a} の長さを取得"
aの長さを取得 = 6
[root@izbp10lqlgy2g31s41bt94z ~]#

$0 $1 $n ファイル名とパラメータ値を取得します。通常はbashスクリプトで使用されます。

$0 はシェル スクリプト ファイル名を表し、1 から始まりパラメータの数を表し、1 は最初のパラメータを表します。ここでtest.sh実行ファイルを作成します

test.shファイルを作成し、コードを入力します [root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $0 $1 $2' > test.sh
[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh
エコー $0 $1 $2

test.sh を実行し、変数 [root@izbp10lqlgy2g31s41bt94z ~] を渡します。# sh test.sh i am skyler
test.sh 私は

ご覧のとおり、3 つのパラメータのうち最初の 2 つが出力されます。$3 を宣言していないため、ファイル名と最初の 2 つのパラメータが出力されます。

$# パラメータの数を取得する

[root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $# $0 $1' > test.sh
[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh
エコー $# $0 $1
[root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh 私はシュアシュアです
4 テスト.sh I

$@ $* 配列形式の参照パラメータリスト

それらの違いは、二重引用符が使用される場合、渡されたパラメータが1 2 3であると仮定すると、「*」の値は「1 2 3」変数になるということです。

テスト
echo '$@ 配列パラメータ形式'
x が "$@" の場合
する
 エコー + $x
終わり
echo '$* 配列パラメータ形式'
x が "$*" の場合
する
 エコー + $x
終わり

ルート@izbp10lqlgy2g31s41bt94z:~# sh テスト.sh 1 2 3
$@+ 1 の配列パラメータ形式
+ 2
+ 3
$* 配列パラメータ形式 + 1 2 3

$? 前のコマンドが正常に実行されたかどうかを判定する

実行成功の値は 0 で、失敗の値は 0 以外です。

[root@izbp10lqlgy2g31s41bt94z ~]# ll
総投与量 172
-rw-r--r-- 1 ルート ルート 49392 2019年2月25日 hs_err_pid24203.log
-rw-r--r-- 1 ルート ルート 49425 2019年2月13日 hs_err_pid25726.log
[root@izbp10lqlgy2g31s41bt94z ~]# echo $?
0
[root@izbp10lqlgy2g31s41bt94z ~]# ca ff
-bash: ca: コマンドが見つかりません [root@izbp10lqlgy2g31s41bt94z ~]# echo $?
127

$() は二重引用符を使用するのと同じである

わずかに

$[] 式の評価

現時点では、[] は判定シナリオには使用されません。[] は一般的に、bash スクリプト内の if while などの条件文での判定として使用されます。

[root@izbp10lqlgy2g31s41bt94z ~]# echo $[5 + 5]
10

$ - シェルで現在使用されているオプションを表示します

[root@izbp10lqlgy2g31s41bt94z ~]# エコー $-
彼BH

説明: himBH 内の各文字はシェル オプションです。詳細については、man bash にアクセスして -h -B などを検索してください。詳細については、http://kodango.com/explain-shell-default-options を参照してください。

$! バックグラウンドで実行されている最後のプロセスのPIDを取得します。bashスクリプトのその他のアプリケーション

[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh &
[1] 362
[root@izbp10lqlgy2g31s41bt94z ~]# エコー $# $0 $1
^C
[1]+ cat test.shを完了する
[root@izbp10lqlgy2g31s41bt94z ~]# echo $!
362

!$ は、前のコマンドのパラメータを次のコマンドのパラメータに渡します。これは通常、より便利であり、bash スクリプトでより多く使用されます。

[root@izbp10lqlgy2g31s41bt94z ~]# cd /Users/skyler/project/test
[root@izbp10lqlgy2g31s41bt94z ~]# ll !$
[root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test
362

!! 前のコマンドを出力します。通常はより便利で、bash スクリプトでよく使用されます。

[root@izbp10lqlgy2g31s41bt94z ~]# !!
[root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test

$$ 現在のプロセスのPIDを取得する

[root@izbp10lqlgy2g31s41bt94z ~]# エコー $$
31268
[root@izbp10lqlgy2g31s41bt94z ~]# ps -ef|grep 31268
ルート 31268 31266 0 08:10 pts/0 00:00:00 -bash

現在のプロセスは bash、pid は 31268 です

平日はもっと頻繁に練習し、必要なときに頼んでください

この効果は、ページングやセグメントのプルによっても実現できますが、具体的な効果はビジネス シナリオによって異なります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Linux のシェル変数 $#、$@、$0、$1、$2 の意味の簡単な説明
  • Windows と Linux の php $_SERVER の違い
  • Linux への SSH リモート ログインで -bash-4.1$ が表示される問題を解決する
  • Linuxで$を#に変更する方法

<<:  MySQL 8.0.15 のインストールと設定のグラフィックチュートリアルと Linux でのパスワード変更

>>:  JavaScript マクロタスクとマイクロタスク

推薦する

JavaScript イベント委任の原則

目次1. イベント委任とは何ですか? 2. イベント委任の原則3. イベント委託の役割1. イベント...

js でクラスセレクターと名前属性セレクターを実装する手順の例

jQuery の登場により、DOM の操作効率が大幅に向上し、開発がより高いレベルに引き上げられまし...

MySQLの権限とインデックスの詳細な説明

mysql の権限とインデックスmysql の最高権限ユーザーは root です。 CREATE U...

Homebrewを使用してMacにMySQLをインストールするときにログインできない問題を解決する

お使いのコンピュータが Mac の場合、homebrew を使用して MySQL をインストールする...

MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明

ビュービューとは何ですか?ビューの役割は何ですか?ビューは仮想テーブルであり、データ自体を含まない論...

6つのレイアウトでのFrameLayoutの使用

序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...

Web デザインのための 5 つのシンプルな XHTML Web フォーム

Web デザイン 5 におけるシンプルな XHTML Web フォーム。 テクニック 1: ラベル ...

JavaScript 配列のマージのケーススタディ

方法1: var a = [1,2,3]; var b = [4,5] b を連結します。 コンソー...

node.js で EventEmitter をカスタマイズする方法

目次序文1. 何ですか2. Node.jsでEventEmitterを使用する方法3. 実施プロセス...

JavaScript イベント委任 (プロキシ) の使用例の詳細

目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...

docker compose デプロイメントにおけるマスタースレーブレプリケーションの実装

目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...

面接官はReactのライフサイクルについてよく質問します

ReactライフサイクルReactのライフサイクルを理解するのに役立つ2つの図React ライフサイ...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

Vue で rem 適応を使用する方法

1. 開発環境vue 2. コンピュータシステム Windows 10 Professional E...

Windows 10 で MySql の解凍バージョンをインストールして構成する方法のチュートリアル

Windows 10 で MySql データベースの解凍バージョンをインストールするステップ 1: ...