Shell脚本中$符号的嵌套使用方法小结

寻技术 Linux / 其他编程 2023年07月11日 86

本文主要介绍在编写 Shell 脚本时,通过嵌套使用 $ 符号,间接获取变量或表达式的值的具体方法。

先说结论,在 Shell 脚本中,可以通过使用 eval 命令来实现 $ 符号的嵌套使用。

Man 手册中对于 eval 命令的解释如下:

eval [arg ...]
    The args are read and concatenated together into a single command. This command is then read and executed by the shell, and its exit status is returned as the value of eval. If there are no args, or only null arguments, eval returns 0.

1 示例

下面通过一个示例来展示通过 eval 命令实现 $ 符号嵌套使用的方法。

现有两个变量:“l_stream_file_index”的值为“1”,“SOURCE_FILE_1”的值为“demo.mp4”,如下图所示:

此时,为了通过变量“l_stream_file_index”间接获取到“SOURCE_FILE_1”的值,就要嵌套使用 $ 符号,但是直接嵌套使用 $ 符号时会报错,如下图所示:

此时,就可以通过 eval 命令解决上述问题了。在本例中,使用 eval 命令的最终命令如下:

eval echo '${SOURCE_FILE_'"${l_stream_file_index}"'}'

上述命令执行结果如下图所示:

说明:

  • eval 命令会将后接命令中的参数先替换为对应的值,然后再进行最终的命令执行操作;
  • 在使用 eval 命令时,需要注意单引号''和双引号""的区别。在上面的示例中,eval 先将双引号中的变量进行了替换。

2 说明

在 Shell 脚本中嵌套使用 $ 符号时,需要特别谨慎小心,因为这种使用方式容易引起一些奇怪的错误。

例如,在下面的示例中,就会报错文件不存在,但实际上文件是存在的,如下图所示:

上图中的报错让人费解,不过肯定是因为嵌套使用 $ 符号导致的,根据本文前面介绍的内容,此时通过 eval 命令修饰该条语句,问题就解决了,如下图所示:

关闭

用微信“扫一扫”