変数コンテンツの削除、置換と置換---削除と置換
変数は元の内容を直接配置して修正できるほか、簡単な動作で変数の内容を微調整する方法はありませんか?例えば、変数コンテンツの削除、置換、置換などを行います!いいですよ!私たちはいくつかの簡単な小さなステップを通じて変数の内容の微調整を行うことができますよ!次はやってみよう!
このセクションでは、変数の内容の削除について説明します.
変数の内容は简単にいくつかのドンドンを通して削除できますよ!PATHという変数の内容を使ってテストしました
[root@SOR_SYS ~]# path=${PATH} [root@SOR_SYS ~]# echo $path/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin
:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin#この3行は1行です!
上の例はおもしろいですね.彼のポイントは次の表で説明できます.
例:
[root@SOR_SYS ~]# echo ${path#/*jdk1.6.0_05/bin:}/usr/local/maven/bin:/root/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/binこれがポイント!「変数内容の先頭から右へ削除」を表し、最も短いもののみを削除します.
最初は意味がわからなくて、ちょうど2つのjdkのディレクトリがあるのではないかと思って、それからテストして、みんなは結果を見て理解するべきで、ほえ~~
おもしろいでしょう.これで#の機能が分かりましたか?次に、次の例3を見てみましょう.
例3:前のすべてのディレクトリを削除し、最後のディレクトリのみを保持します[root@SOR_SYS ~]# echo ${path#/*:}/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
[root@SOR_SYS ~]# echo ${path##/*:}/root/bin
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
とても面白いです!そうじゃないですか.PATHという変数の内容では、各ディレクトリはコロン(:)で区切られているので、ディレクトリを最初から削除するのは斜線(/)からコロン(:)までのデータです!でもPATHにはコロン(:)が1つだけではありませんね!だから##と##はそれぞれ:
#:文字に取って代わる『最短の』に該当する.
##:文字に取って代わる『最長の』に該当する
上記は『前から変数コンテンツを削除する』ということですが、『後から変数コンテンツを削除する』としたら?このときはパーセント(%)記号を使わなければなりません!例4のやり方を見てみましょう.
[root@SOR_SYS ~]# echo ${path%:*bin}/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
[root@SOR_SYS ~]# echo ${path%%:*bin}/usr/local/ruby-1.8.7-p330/bin
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
私は変数の内容の后ろから前へ削除したいので、私のこの変数の内容の最后の终わりは『/root/bin』なので、あなたは上の私が削除したデータが最后にきっと『bin』であることを见ることができて、つまり『:*bin』のあの*はワイルドカードを代表します!%と%の意味は実は##と###に似ています!このように理解しますか?
例題:
もしあなたがrootだとしたら、あなたのMAIL変数は/var/spool/mail/rootであるべきです.一番後ろのファイル名(root)だけを残したいとしたら、前のディレクトリ名はもう要らないとします.$MAIL変数をどのように利用して達成しますか?
回答:
題意は実はこうです
「/var/spool/mail/root」は、2つの斜線間のすべてのデータ(最長一致)を削除します.この時、あなたはこのようにすることができます.
[root@SOR_SYS ~]# echo ${MAIL##/*/} root
逆に、ファイル名だけを外したい場合は、ディレクトリの名前、すなわち「/var/spool/mail/root」(最短適合)を保持します.しかし、末尾のアルファベットがなぜか分からない場合は、次のようにワイルドカードで処理できます.
[root@SOR_SYS ~]# echo ${MAIL%/*}/var/spool/mail
削除機能を理解したら、次に置き換えについて話しましょう.サンプル6を遊び続けます!
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
[root@SOR_SYS ~]# echo ${path//sbin/SBIN}/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin
:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
この部分をまとめて説明します.
変数の構成方法
この部分をまとめて説明します.
変数の構成方法の説明
${変数#キーワード}${変数##キーワード}
変数コンテンツの先頭からのデータが『キーワード』に該当する場合、該当する最短データを削除変数コンテンツの先頭からのデータが『キーワード』に該当する場合、該当する最長データを削除する
${変数%キーワード}${変数%%キーワード}
変数内容が末尾から前へ進むデータが『キーワード』に該当する場合、該当する最短データを削除変数内容が末尾から前へ向かうデータが『キーワード』に該当する場合、該当する最長データを削除する
${変数/旧文字列/新文字列}${変数//旧文字列/新文字列}
変数内容が『旧文字列』に該当すると『最初の旧文字列が新文字列に置き換えられる』変数内容が『旧文字列』に該当すると『全ての旧文字列が新文字列に置き換えられる』
このセクションでは、変数の内容の削除について説明します.
変数の内容は简単にいくつかのドンドンを通して削除できますよ!PATHという変数の内容を使ってテストしました
: path PATH
[root@SOR_SYS ~]# path=${PATH} [root@SOR_SYS ~]# echo $path/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin
:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin#この3行は1行です!
: kerberos, , ?
[root@SOR_SYS ~]#echo ${path#/*kerberos/bin:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.6.0_05/bin
:/usr/local/maven/bin:/root/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin !
上の例はおもしろいですね.彼のポイントは次の表で説明できます.
${variable#/*kerberos/bin:}
!
${variable#/*kerberos/bin:}
, , path 『 』
${variable#/*kerberos/bin:}
! 『 』,
${variable#/*kerberos/bin:}
, # , / 。
, * 0
, path :
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin
:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.6.0_05/bin
:/usr/local/maven/bin:/root/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin <== !
例:
[root@SOR_SYS ~]# echo ${path#/*jdk1.6.0_05/bin:}/usr/local/maven/bin:/root/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/binこれがポイント!「変数内容の先頭から右へ削除」を表し、最も短いもののみを削除します.
最初は意味がわからなくて、ちょうど2つのjdkのディレクトリがあるのではないかと思って、それからテストして、みんなは結果を見て理解するべきで、ほえ~~
おもしろいでしょう.これで#の機能が分かりましたか?次に、次の例3を見てみましょう.
例3:前のすべてのディレクトリを削除し、最後のディレクトリのみを保持します[root@SOR_SYS ~]# echo ${path#/*:}/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
# , :
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
[root@SOR_SYS ~]# echo ${path##/*:}/root/bin
! # ## , 『 』! :
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
とても面白いです!そうじゃないですか.PATHという変数の内容では、各ディレクトリはコロン(:)で区切られているので、ディレクトリを最初から削除するのは斜線(/)からコロン(:)までのデータです!でもPATHにはコロン(:)が1つだけではありませんね!だから##と##はそれぞれ:
#:文字に取って代わる『最短の』に該当する.
##:文字に取って代わる『最長の』に該当する
上記は『前から変数コンテンツを削除する』ということですが、『後から変数コンテンツを削除する』としたら?このときはパーセント(%)記号を使わなければなりません!例4のやり方を見てみましょう.
: , : bin
[root@SOR_SYS ~]# echo ${path%:*bin}/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin
% ! :
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
: ?
[root@SOR_SYS ~]# echo ${path%%:*bin}/usr/local/ruby-1.8.7-p330/bin
, %% , :
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
私は変数の内容の后ろから前へ削除したいので、私のこの変数の内容の最后の终わりは『/root/bin』なので、あなたは上の私が削除したデータが最后にきっと『bin』であることを见ることができて、つまり『:*bin』のあの*はワイルドカードを代表します!%と%の意味は実は##と###に似ています!このように理解しますか?
例題:
もしあなたがrootだとしたら、あなたのMAIL変数は/var/spool/mail/rootであるべきです.一番後ろのファイル名(root)だけを残したいとしたら、前のディレクトリ名はもう要らないとします.$MAIL変数をどのように利用して達成しますか?
回答:
題意は実はこうです
「/var/spool/mail/root」は、2つの斜線間のすべてのデータ(最長一致)を削除します.この時、あなたはこのようにすることができます.
[root@SOR_SYS ~]# echo ${MAIL##/*/} root
逆に、ファイル名だけを外したい場合は、ディレクトリの名前、すなわち「/var/spool/mail/root」(最短適合)を保持します.しかし、末尾のアルファベットがなぜか分からない場合は、次のようにワイルドカードで処理できます.
[root@SOR_SYS ~]# echo ${MAIL%/*}/var/spool/mail
削除機能を理解したら、次に置き換えについて話しましょう.サンプル6を遊び続けます!
: path sbin SBIN:
[root@SOR_SYS ~]#echo ${path/sbin/SBIN}
/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
! ,
, !
[root@SOR_SYS ~]# echo ${path//sbin/SBIN}/usr/local/ruby-1.8.7-p330/bin:/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin
:/usr/local/jdk1.6.0_05/bin:/usr/local/maven/bin:/root/bin
,
この部分をまとめて説明します.
変数の構成方法
この部分をまとめて説明します.
変数の構成方法の説明
${変数#キーワード}${変数##キーワード}
変数コンテンツの先頭からのデータが『キーワード』に該当する場合、該当する最短データを削除変数コンテンツの先頭からのデータが『キーワード』に該当する場合、該当する最長データを削除する
${変数%キーワード}${変数%%キーワード}
変数内容が末尾から前へ進むデータが『キーワード』に該当する場合、該当する最短データを削除変数内容が末尾から前へ向かうデータが『キーワード』に該当する場合、該当する最長データを削除する
${変数/旧文字列/新文字列}${変数//旧文字列/新文字列}
変数内容が『旧文字列』に該当すると『最初の旧文字列が新文字列に置き換えられる』変数内容が『旧文字列』に該当すると『全ての旧文字列が新文字列に置き換えられる』