gpt4 book ai didi

shell - 在 csh Shell 脚本中读取带空格的用户输入

转载 作者:行者123 更新时间:2023-12-01 12:01:39 59 4
gpt4 key购买 nike

我有一个脚本,用户应该可以在其中输入带空格的字符串。到目前为止,我有:

#bin/csh

echo "TEST 1"
echo -n "Input : "
set TEST = $<

echo "Var | " $TEST

set TEST=`echo $TEST`

echo "Var after echo | " $TEST

set TEST=`echo $TEST | sed 's/ /_/g'`

echo "Var after change | " $TEST

如果我在“input”处输入字符串“r r r”,$TEST 将只接受“r”。我希望能够将 $TEST 设置为“r r r”。这可能吗?如果我输入像“1 1 1”这样的字符串,我会得到一个错误:

set: Variable name must begin with a letter.

这是什么原因?

最佳答案

这是因为您没有在 SET 语句中使用引号。当您输入 "r r r" 作为输入时,两个不同的变体(不带引号和带引号)等同于:

set TEST=$<    :is equivalent to:  set TEST=r r r
set TEST="$<" :is equivalent to: set TEST="r r r"

其中第一个简单地将 TEST 设置为 "r" 并将 r 设置为 ""(两次! ).第二个将 TEST 设置为 "r r r"。那是因为 csh 允许您进行多项分配,例如:

set a=1 b=2 c d=4

因此您需要使用 SET 的引用变体。检查以下抄本以了解其工作原理:

[pax ~]$ set x=$< ; echo .$x.
hello
.hello.

[pax ~]$ set x="$<" ; echo $x ; echo .$b.$c.
a b c
.a b c.
b: Undefined variable.

[pax ~]$ set x=$< ; echo $x ; echo .$b.$c.
a b c
.a.
...

[pax ~]$ set x=$< ; echo $x ; echo .$b.$c.
a b=7 c=urk!
.a.
.7.urk!.

您收到输入 "1 1 1" 时描述的错误的原因是您有效地执行了:

set TEST=1 1 1

csh 认为这意味着您要创建变量 TEST 设置为 "1" 后跟变量 1,不以字母开头,因此不允许。使用引用的变体,这变成:

set TEST="1 1 1"

这将达到您的预期。

关于shell - 在 csh Shell 脚本中读取带空格的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/775953/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com