bashシェルで以下を実行した場合:
./script /path/to/file.txt
echo !$:t
file.txtを出力し、すべて問題ありません。
私のスクリプトにある場合:
echo $1:t
/path/to/file.txt:tを出力します
シェルで見られる動作に従って、file.txtを出力するにはどうすればよいですか?前もって感謝します。
パラメータ展開構文を使用します。
echo ${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"`
修飾子は単語指定子でのみ機能します