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 マクロタスクとマイクロタスク

推薦する

MySQL学習データベース検索文DQL小百章

目次1. データの簡単な取得2. データの並べ替えと取得2.1. 基本構文2.2. ソート方向を指定...

Vue のスロットリング関数使用時の落とし穴ガイド

序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...

Linux リモート コントロール Windows システム プログラム (3 つの方法)

場合によっては、Windows システム上のプログラムを Linux 上でリモートで実行する必要があ...

HTMLフローティングプロンプトボックス機能の実装コード

一般的なフォーム プロンプトは常にフォームのスペースを占有し、フォームが長くなったり広くなったりして...

vue+springbootでログイン認証コードを実現

この記事では、ログイン認証コードを実装するためのvue+springbootの具体的なコードを例とし...

面接官がmysqlのcharとvarcharの違いを尋ねたとき

目次charとvarcharの違いcharとvarcharの違い上記は、MySQL における cha...

MySQL マルチテーブルクエリの具体例

1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...

JavaScript ファイルの読み込みとブロックの問題: パフォーマンス最適化のケーススタディ

まず質問させてください。HTML ページを作成するときに、外部から JS ファイルをインポートする場...

MySQLデータ損失の原因と解決策

目次序文問題の説明原因分析拡大する総括する序文最近、データの欠落やデータの損失に関するフィードバック...

MySQL データベース クエリ パフォーマンス最適化戦略

クエリを最適化するExplain ステートメントを使用してクエリ ステートメントを分析するExpla...

テキストエリアをレイアウトしたときにテキストが左下にあり、サイズを変更できない問題の解決策

2つの小さな問題ですが、長い間私を悩ませていました。最初の質問テキストエリアの左側のテキストは常にテ...

MySQL ベースのシーケンス実装方法

チームは新しいフレームを交換しました。すべての新しいビジネスでは、新しいフレームワークと新しいデータ...

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

Vueページの画像が表示されない問題の解決方法

新しいバージョンの設定インターフェースを作る際に、vueフレームワークを使用して実装しました。ページ...