大家好,我遇到了这个问题,我有一个 csh 中的示例程序(我知道它不是用于脚本的最佳语言,但这里我没有选择)其如下:
#!/bin/csh
echo 'please enter values'
read a
read -e b
echo "My values are $a and $b"
您可能会看到,我的第二次读取将接受文件输入。这是必需的,因为我的实际程序将有它;现在我想要做的是将其转换为别名,但是当我执行上述脚本时,我得到了以下输出
please enter values
read: Command not found
read: Command not found
a: Undefined variable
我该如何解决这个问题,同时我还想将这 4 行全部转换为多行别名。我以前写过单行别名,没有问题,但不确定多行是否可行。如果有人能帮忙,我将不胜感激
答案1
正如您所发现的,C shell 没有read
类似于 Bourne 类型 shell 的内置函数。
我是不是精通csh
语法,但据我所知,最接近的等价方法是使用特殊变量$<
。来自man csh
:
$< Substitutes a line from the standard input, with no further interpretation. It can be used to read from the keyboard in a shell script.
例如
$ cat myscript.csh
#!/bin/csh
echo 'please enter values'
set a = $<
set b = $<
echo "My values are $a and $b"
这使
$ ./myscript.csh
please enter values
123
abc
My values are 123 and abc
请注意,在处理多字输入时,赋值存在与实现相关的差异$<
- 特别是,Tenextcsh
默认不引用输入,而是要求$<:q
获得与 BSD 相同的行为csh
。此外(据我所知)没有与 bash shell 等效的内置 readline 编辑支持read -e
。
就多行别名而言,它们确实有效:
% alias jo '\
echo "please enter values "\
set a = $< \
set b = $< \
echo "My values are $a and $b"'
%
% alias
jo
echo "please enter values "
set a = $<
set b = $<
echo "My values are $a and $b"
测试
% jo
% please enter values
123
foo bar
My values are 123 and foo bar
%
然而我并不建议依赖这个功能。