jik@cats.ucsc.edu (Jonathan I. Kamens) (06/25/91)
(Note cross-post and followup-to.) In article <1991Jun24.230024.18513@iscnvx.uucp>, wurtz@iscnvx.uucp (J D Wurtz) writes: |> 1) the executable c-shell script named "sc": |> |> #!/bin/csh -f |> |> if ( $1 == "" ) then I personally would prefer if ($#argv < 1 ) then here. |> echo 'Name of the directory> \c' |> set dir = ($<) |> else |> set dir = $1 |> endif |> |> cat $dir/testfile # display the file |> |> ... |> |> 4) the variable "ilu" is set to "/home/love/you" Is the variable a shell variable (set with "set") or an environment variable (set with "setenv")? If the former, there's no way to do what you want to do, because the subshell in which the shell script runs has no idea what the contents of the variable are. |> ... |> |> 4) sc |> Name of the directory> $ilu |> |> Cases 1, 2, and 3 above all work very nicely, doing exactly what I want. |> Case 4, however, does not work because shell variable "ilu" is not substituted |> with its value (which is "/home/love/you"). |> |> Who can please tell me how to make the c-shell treat variable "ilu" the same |> for case (4) as it does for case (3)? Also, is this called "recursive |> substitution"? Many thanks for your assistance. After set dir = ($<) you could add set dir = `eval echo $dir` However, as I said, this will only work if the variable is an environment variable. In any case, I don't really know what I'd call what you're trying to do. "Repeated evaluation" seems as close as "recursive substitution." See the man page for csh for more information about "eval." -- Jonathan Kamens jik@CATS.UCSC.EDU