スクリプトの変数でbash履歴修飾子を使用できますか?

スクリプトの変数でbash履歴修飾子を使用できますか?

次のスクリプトでbash履歴修飾子を使用できる場合はどうなりますか?

!$:hファイルのパスを取得します。

スクリプトで使用できる方法はありますか?例えば${1:h}

ベストアンサー1

cshこれらの履歴修飾子は、機能が派生する変数にも適用できます。

ただし、bashそのセクションをコピーしないように選択してください。zshしかし、それは。ここでは以下をzsh使用できますbash

$ file=foo/bar/
$ echo $file:h # (or ${file:h})
foo

zsh(この例は、実際にどの改善がcsh返されるかを示すために選択されましたfoo/bar。また、他の多くの有用な修飾子もサポートしています。)

他のシェルでは常に次のものを使用できますdirname

$ dir=$(dirname -- "$file")
$ echo "$dir"
foo

(ただし、改行文字で終わるディレクトリ名では正しく動作しません。)

bash他のPOSIXシェルと同様に使用することができますが、またはなどの一部の特殊なケースでは、予期しない結果が${file%/*}発生する可能性があります。foo/bar/foo/

おすすめ記事