1

bashシェルで以下を実行した場合:

./script /path/to/file.txt
echo !$:t

file.txtを出力し、すべて問題ありません。

私のスクリプトにある場合:

echo $1:t

/path/to/file.txt:tを出力します

シェルで見られる動作に従って、file.txtを出力するにはどうすればよいですか?前もって感謝します。

4

3 に答える 3

2

パラメータ展開構文を使用します。

echo ${1##*/}
于 2011-01-28T23:17:42.440 に答える
1

${1##*/}bashでは、展開を使用して、すべての先行パスコンポーネントが削除されたファイルのベース名を取得できます。

$ set -- /path/to/file
$ echo "$1"
/path/to/file
$ echo "${1##*/}"
file

これはスクリプトでも使用できます。

#!/bin/sh

echo "${1##*/}"

${1##*/}Bashがとして呼び出されたときに機能しますが、他のBash機能では、スクリプトの開始時に/bin/sh使用する必要があります。#!/bin/bashこの表記は、他のシェルでも使用できない場合があります。

よりポータブルなソリューションは次のとおりです。

#!/bin/sh

echo `basename "$1"`
于 2011-01-28T23:17:55.723 に答える
1

修飾子は単語指定子でのみ機能します

于 2011-01-28T23:19:27.273 に答える