Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Read命令在if语句中不起作用。以ksh为单位_Shell_Unix_Ksh - Fatal编程技术网

Shell Read命令在if语句中不起作用。以ksh为单位

Shell Read命令在if语句中不起作用。以ksh为单位,shell,unix,ksh,Shell,Unix,Ksh,如何仅在特定条件下读取用户输入。以下代码在ksh中不起作用: if [[ $contract = "$fld1" ]];then read position?"Enter the position of Contract number in m-n format,m should be less than n " fi 在上述条件下,代码不会等待用户提示在ksh下发布的代码工作正常 $ contract=c $ fld1=c $ if [[ $contract = "$fld1" ]];

如何仅在特定条件下读取用户输入。以下代码在ksh中不起作用:

if [[ $contract = "$fld1" ]];then
   read position?"Enter the position of Contract number in m-n format,m should be less than n "
fi

在上述条件下,代码不会等待用户提示

在ksh下发布的代码工作正常

$ contract=c
$ fld1=c
$ if [[ $contract = "$fld1" ]];then
> read position?"Enter the position of Contract number in m-n format,m should be less than n "                         <
> fi
Enter the position of Contract number in m-n format,m should be less than n 1-2
$ echo $position
1-2

请注意,
read variable?提示符
语法是特定于
ksh的。在
bash
下,您将使用
read-p提示符变量
。在大多数基于Bourne语法的shell上可用的可移植方法是
printf“%s”$prompt;读取变量

发布的代码在ksh下工作正常

$ contract=c
$ fld1=c
$ if [[ $contract = "$fld1" ]];then
> read position?"Enter the position of Contract number in m-n format,m should be less than n "                         <
> fi
Enter the position of Contract number in m-n format,m should be less than n 1-2
$ echo $position
1-2

请注意,
read variable?提示符
语法是特定于
ksh的。在
bash
下,您将使用
read-p提示符变量
。在大多数基于Bourne语法的shell上可用的可移植方法是
printf“%s”$prompt;读取变量

这是代码的工作版本:

if [[ $contract = "$fld1" ]];then
echo "Enter the position of Contract number in m-n format,m should be less than n"
read position
fi
如果您希望终端等待用户回复,则必须分别添加回音和读取。 这对你来说很好。 这是输出:

Enter the position of Contract number in m-n format,m should be less than n
##cursor waiting here for an input##

这是代码的工作版本:

if [[ $contract = "$fld1" ]];then
echo "Enter the position of Contract number in m-n format,m should be less than n"
read position
fi
如果您希望终端等待用户回复,则必须分别添加回音和读取。 这对你来说很好。 这是输出:

Enter the position of Contract number in m-n format,m should be less than n
##cursor waiting here for an input##


在执行过程中,考虑使用<代码> SET-X/COD>监视<代码> $合同<代码>和<代码> $FLD1。由于这是完全有效的代码(至少在ksh93中是如此),可能的解释是它们并不真正相等。(…我不得不想知道谁在没有充分理解问题空间的情况下对一个问题进行了投票,以知道它所识别的问题是否是真实的)。上述代码在我的ksh中运行良好@查理·达菲,谢谢你对我的评论。@Raju,别担心。顺便说一句,在这个答案被删除之前,我打算修改我的评论中的一个链接,
test
[]
的POSIX规范。诚然,
[[]]
是它自己的语法(这就是它不需要遵循引用规则的原因),但在大多数情况下,它是一个超集。(在问题中引用右边是正确和恰当的原因是“大多数目的”规则的例外之一:如果
=
的右边在
[[]]
中没有被引用,它被视为一个全局测试,而不是一个简单的比较)。@Raju,……所以我说的时候实际上有点不准确“隐式引用”,而不是“隐式地抑制GROB扩展和字符串分割”。考虑使用<代码> SET-X/CODE来监视<代码> $合同< /> >和<代码> $FLD1在执行过程中。因为这是完全有效的代码(至少在KSH96中),可能的解释是它们不是真正相等的。(…我想知道是谁在没有充分了解问题空间的情况下对问题进行了投票,从而不知道它所确定的问题是否真实)。以上代码在我的ksh中运行良好。@CharlesDuffy,谢谢你的评论。@Raju,别担心。顺便说一句,在这个答案被删除之前,我打算修改我的评论中的一个链接,即用于测试和测试的POSIX规范。
[[]
。当然,
[[[]]
是它自己的语法(这就是为什么它不需要遵循引用规则的原因),但在大多数情况下,它是一个超集。(在问题中引用右侧是正确和合适的原因是“大多数情况”规则的例外之一:如果
=
的右侧在
[[]]
中未被引用,则将其视为全局测试,而不是简单的比较).@Raju,…所以我说“隐式引用”,而不是“隐式抑制全局扩展和字符串拆分”,实际上有点不准确".实际上,你的代码可以工作,但它不正确,因为它不能正常工作,你只打印消息,但是终端不等待用户回复…….该死的,我刚刚看到它,它实际上打印了行,并希望用户在收到回音后立即添加输入??这太难看了,非常令人困惑,即使是我,也不得不思考3分钟在我明白之前,想想一个用户,哈哈……没有
echo
,这种
read
语法一直受到
ksh
的支持。我没有听到你关于用户被混淆为(s)的评论他看不到源代码,只看到了提示。我的意思是,他们会被提示搞糊涂,因为输出是这样的
以m-n格式输入合同号的位置,m应该小于n
,正如您所做的那样,它是说“小于n”终端希望用户在那里添加他们的输入,即使我无法理解它在那里要求我输入,但是如果你改变行,就像我在下面所做的那样,这是正确的和可以理解的。正如你所做的那样,终端似乎被卡住了…错误的代码,糟糕的解决方案。我是说在我的第二条评论中回音,我是指实际的o输出不是命令echo:)我没有写那个提示符,是OP写的。我同意,在编写提示时,用户可能会感到困惑,但报告的问题是read命令不起作用,而不是用户感到困惑。答案还是编辑好了,有更好的提示。实际上你的代码可以工作,但它不正确,因为它不能正常工作,你只打印消息,但是终端不会等待用户回复……该死的,我刚才看到了,它实际上打印了行,并希望用户在收到回音后立即添加输入??这很难看,也很令人困惑,即使是我,在得到它之前,也不得不思考3分钟,想想一个用户,哈哈……没有
echo
,这种
read
语法一直受到
ksh
的支持。我没有收到你关于用户被混淆的评论,因为他根本看不到源代码,只有提示。我的意思是,他们会被提示混淆,因为输出是这样的
以m-n格式输入合同号的位置,m应该小于n,正如你所做的那样,它说的是“小于n”终端希望用户在此处添加输入,