パラメータ拡張を使用して最後の区切り文字の文字列を切り取りたいと思います。
name='ls $(Build.ArtifactStagingDirectory)/drop/abc.jar'
string1="${name%/*}"
string2="${name##*/}"
echo "$string1"
$ echo "$string2"
出力する必要がありますabc.jar
しかし、ますます多くなります。.jar
答え1
$name
ある時点で、Windowsシステムで生成されたテキストファイルから文字列の先頭を取得して.jar
最後に追加すると、abc
文字列のビットは最終的に同じになります.jar
。
抽出した文字列には、$string2
次の文字が含まれます。
abc\r.jar
\r
テキストキャリッジリターン文字を表します。
出力を使用すると、カーソルはecho
キャリッジリターン文字を介して行の先頭に戻り、最後のカーソルは.jar
最初のカーソルを上書きして見えるものだけをabc
残します。.jar
解決策は、初期ファイル名を提供するすべてのファイルをDOS / Windowsテキスト形式からUnixテキスト形式に変換することです。dos2unix
これは変換ツールを使用して行うのが最善です。
以下を使用して、文字列からすべてのキャリッジリターンを削除することもできます。
string2=${string2//$'\r'/}
値を出力する前にシェルでbash
または次を使用して
tr -d '\r' <<<"$string2"
答え2
目標が有効なファイル名から「abc.jar」を取得することである場合は、次のようにします。基本名注文する:
string2=`basename $name`