-
:h
gives the head of a
pathname (
14.2
)
,
as follows:
%
echo /a/b/c
/a/b/c
%
echo !$:h
echo /a/b
/a/b
That took off the filename and left the header.
This also could be used with C shell
variables (
47.5
)
as:
%
set x = /a/b/c
%
echo $x
/a/b/c
%
echo $x:h
/a/b
-
:r
returns the root of a filename:
%
echo xyz.c abc.c
xyz.c abc.c
%
echo !$:r
echo abc
abc
The
:r
removed the
.c
from the last argument,
leaving the root name.
This could also be used in C shell variable names:
%
set x = abc.c
%
echo $x:r
abc
-
:g
For more than one name, you can add the
g
operator to make
the operation global. For example:
(...)
|
%
set x = (a.a b.b c.c)
%
echo $x:gr
a b c
|
The
:gr
operator stripped off all dot
(
.
) suffixes.
By the way, this use of
g
does not work with the history commands.
This is the C shell's answer to the
basename
(
45.18
)
command.
-
:e
returns the extension (the part of the name after a dot).
Using
csh
variables:
%
set x=(abc.c)
%
echo $x:e
c
No luck using that within history, either.
-
:t
gives the tail of a pathname - the actual filename without the path:
%
echo /a/b/c
/a/b/c
%
echo !$:t
c
With
csh
variables:
%
set x=(/a/b/c)
%
echo $x:t
c
And with multiple pathnames, you can do it globally with:
%
set x=(/a/b/c /d/e/f /g/h/i)
%
echo $x:gt
c f i
While the corresponding heads would be:
%
set x=(/a/b/c /d/e/f /g/h/i)
%
echo $x:gh
/a/b /d/e /g/h
-
:p
prints the command, but does not execute it (
11.10
)
:
%
echo *
fn1 fn2 fn3
%
!:p
echo fn1 fn2 fn3
-
:q
prevents further filename expansion, or prints the command as is:
%
echo *
fn1 fn2 fn3
%
!:q
echo *
*
The first command echoed the files in the directory, and when the
:q
was applied, it echoed only the special character.
-
:x
is like
:q
, but it breaks the line into words.
That is, when using
:q
, it is all one word, while
:x
will break it up into multiple words.
[
:q
and
:x
are more often used with
C shell arrays (
47.5
)
.
-
JP
]