在 C-Shell 语句中间使用 $ 符号

Using $ notation in middle of C-Shell statement

我有一堆目录要处理,所以我开始这样的 for 循环:

foreach n (1 2 3 4 5 6 7 8)

然后我有一堆命令,我从不同的地方复制几个文件

cp file1 dir$n
cp file2 dir$n

但我有几个命令,其中 $n 位于命令的中间,如下所示:

cp -r dir$nstep1 dir$n

当我运行这个命令时,shell抱怨它找不到变量$nstep1。我想要做的是首先评估 $n 然后连接它周围的文本。我尝试使用 `` 和 (),但它们都不起作用。如何在 csh 中执行此操作?

在这方面的行为类似于 POSIX shells:

cp -r "dir${n}step1" "dir${n}"

引号防止字符串拆分和 glob 扩展。要观察这意味着什么,请比较以下内容:

# prints "hello * cruel * world" on one line
set n=" * cruel * "
printf '%s\n' "hello${n}world"

...为此:

# prints "hello" on one line
# ...then a list of files in the current directory each on their own lines
# ...then "cruel" on another line
# ...then a list of files again
# ... and then "world"
set n=" * cruel * "
printf '%s\n' hello${n}world

在实际情况下,正确的引号可能是删除您尝试操作的名称奇怪的文件与删除目录中的所有其他文件之间的区别。