Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
无法将点指定给Bash shell中的变量_Bash_Shell_Centos6.5 - Fatal编程技术网

无法将点指定给Bash shell中的变量

无法将点指定给Bash shell中的变量,bash,shell,centos6.5,Bash,Shell,Centos6.5,我通过键入Terminal和在CentOS 6.5 64位上执行file来运行此命令 let t='.'; echo $t; 真不敢相信它会产生如此严重的错误: -bash: let: t=.: syntax error: operand expected (error token is ".") 据我所知,单引号字符串不应该被解析。事实上,首先,我想做的是: let $target_path='./files/mp4'; 有人能解释一下这个行为并指导我停止这个wierd行为吗?除非你想用

我通过键入Terminal和在CentOS 6.5 64位上执行file来运行此命令

let t='.'; echo $t;
真不敢相信它会产生如此严重的错误:

-bash: let: t=.: syntax error: operand expected (error token is ".")
据我所知,单引号字符串不应该被解析。事实上,首先,我想做的是:

let $target_path='./files/mp4';

有人能解释一下这个行为并指导我停止这个wierd行为吗?

除非你想用算术表达式来计算变量值,否则你需要这样赋值:

t='.'
a=$((10*2))
echo "$a" # Prints: 20
let
用于计算算术表达式,并且
/files/mp4
在该算术表达式中产生语法错误。选中帮助让


下面是如何使用
let
的示例:

a="10*2"
echo "$a" # Prints: 10*2

let a="10*2"
echo "$a" # Prints: 20

如果您遵循下面的讨论,您可能已经注意到,即使对于数学表达式
let
也不是最佳选择。这是因为您可以在这种情况下使用
算术展开
,它是由POSIX定义的,与
let
相反。使用
算术展开
上述示例如下所示:

t='.'
a=$((10*2))
echo "$a" # Prints: 20
查看本文章以了解更多信息:


    • 在这里使用
      是不对的。
      您可以这样做:

      AMD$ t='.'
      AMD$ echo $t
      .
      
      AMD$ t='./files/mp4'
      AMD$ echo $t
      ./files/mp4
      

      只需使用
      target\u path='./files/mp4'
      。bash中的变量设置为
      var=“value”
      ,而不是
      $var=“value”
      。要在以后使用,请使用美元:
      echo“$var”
      。此外,不需要使用
      let
      通常是必需的,因为您还可以编写
      a=$((10*2))
      (这有利于成为POSIX标准的一部分)。@chepner我不确定
      let
      和算术扩展是否也可以这样做。我想不是。文档中没有明确说明这一点。此外,OP正在搜索字符串赋值。这就是为什么我不想指出
      let
      的替代方法,我只是想说明
      let
      赋值和字符串赋值之间的基本区别。(我确实有一个拼写错误,应该是“
      let
      通常是不必要的”)。至少,
      let
      (…)
      命令取代。根据手册页,
      let“expression”
      ((expression))
      (和+1相同,因为至少在这种情况下,您需要的是常规赋值。只是想指出,
      let
      本身可能永远不需要,不知道它的存在可以避免这种类型的错误。)
      根据手册页,让“expression”与((expression))相同
      这就是我需要的。我只是不太确定。非常感谢!