Bashスクリプトで提供されたuniテキストでは、次の変数の割り当てが妨げられ、まだ誰からも返信を受けていません。ここで誰かが助けてくれることを願っています。
name=${0##*/}
入力したコマンドの名前を指定するには、それを拡張する必要があります。中かっこ内の最初の文字は0なので、パラメータ$ 0からこの値を取得する方法がわかります。ところで、前のページの情報(対応するuniドキュメント)とこれまでオンラインで見たソースによると、#はスクリプト呼び出し時に使用する引数の数を表し、*は引数を文字列として含んでいます。どのようにこれらの特別なパラメータがすべてパラメータ$ 0に拡張されるのか理解できません。
名前を次のように拡張したいと思います: code/script2 3 3 code/script2 fred george allison.
誰かが中括弧の間の各特殊パラメータが名前:code / script2に拡張される役割を説明できる場合は、本当に感謝します。
助けてくれてありがとう!
以下は、コンテキストの完全なスクリプトと出力です。
1 #!/bin/bash
2 # A simple script showing some of the special variables
3
4 echo "The full name of this script is $0"
5
6 name=${0##*/}
7
8 echo "The name of this script is $name"
9
10 echo "The process ID of this script is $$"
11
12 echo "This script was called with $# parameters" 13
14 echo "The parameters are \"$*\""
16 echo "Parameter 1 is - $1"
17 echo "Parameter 2 is - $2"
18 echo "Parameter 3 is - $3"
prompt: code/script2 fred george allison
The full name of this script is code/script2
The name of this script is script2
The process ID of this script is 3501
This script was called with 3 parameters The parameters are "fred george allison"
Parameter 1 is - fred
Parameter 2 is - george
Parameter 3 is - allison
答え1
あなたは混乱しています${#var}
(これは戻ります長さvar
) 戻り${var##substr}
値はvar
次の後に返されます。最長のプレフィックス一致を削除 substr
。
この場合、部分文字列は*/
呼び出しスクリプト名のすべての先行パスコンポーネントであり、最終ファイル名コンポーネントのみを残しますscript2
。どちらの式もこの文字を使用しますが、#
場所は#
重要です。
${var#substr}
表面的にはより近いように見えますが、削除後に${#var}
値を返す値もあります。var
最短プレフィックスと一致します。
例を見る文字列の一部を削除