これはおそらくzshのマニュアルにあります。怠惰でここに質問してすみません。次の例に示すように、zshの:tには何か特別なものがあるようです。
% x=foo
% echo $x:bar
foo:bar
% echo $x:toad
foooad
動作は$x:bar
予想される動作ですが、:t
バックスペースとして表示されるようです。誰かがこの問題を議論するマニュアルの適切なセクションに案内してもらえますか?ありがとうございます!
答え1
:t
は修飾子
t [ digits ]
すべての先行パス名コンポーネントを削除し、最後のコンポーネント(末尾のコンポーネント)のみを残します。これは「」と同じですbasename
。すべての末尾のスラッシュを削除して開始します。素数は上記の(h)と同じ方法で処理されますが、この場合、デフォルト値1の代わりに末尾のコンポーネントの数が保持されます。 0 は 1 と同じ方法で処理されます。
% x=/foo/bar/baz
% echo $x:toad
bazoad
% echo $x:t
baz
% echo ${x:t2}
bar/baz
(:t
、cshの場合は1990年から使用されており、:t2
バリアントは次のとおりです。2019年に追加バージョン 5.8 で初めて利用可能)。
答え2
これは修飾子です。variable:modifier
変数が拡張されたときに変更できるようにします。お客様の場合、より明確にするには:
echo ${x:t}bar
からすべての先行パス名コンポーネントを削除しますx
。 (設定してみてくださいx=/usr/bin/foo
!)
正直に言って、自分を訓練しようとしています。いいえ文字列に "raw"を使用してください$variable
- 合併症のリスクが高すぎます(x=foo; xy=bar
、echo $xyz
...)。これにより、echo ${x}:toad
シェルが望むよりもスマートになるリスクが排除されます。