パラメータ拡張挿入カットインファイル

パラメータ拡張挿入カットインファイル

パラメータ拡張を使用して最後の区切り文字の文字列を切り取りたいと思います。

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`

関連情報