当前位置: 首页 > 面试题库 >

在bash“读取时”循环中设置的变量在设置后未设置

潘自强
2023-03-14
问题内容

我尝试使用下面的代码将命令输出存储在数组中,但是在“ while循环”之后无法打印数组元素,这意味着在代码的最后一行中,我的代码是否存在任何问题?

#! /bin/bash

ls -a | while read line

do
    array[$i]="$line "

        echo ${array[ $i ]}
        ((i++))
done

echo ${array[@]}  <------------

问题答案:

问题是您在 外壳中添加了元素。详细说明:

command1 | command2

导致command2在子shell中执行,这是一个单独的执行环境。这意味着设置的变量command2不适用于 当前
外壳,其执行环境不会受到影响。您可以改为使用流程替代来实现相同目的:

while read line; do
 ...
done < <(ls -l)

请注意,不建议解析ls。尝试使用find代替。



 类似资料:
  • 问题内容: 在中,我有以下脚本正在工作: Bash中的功能等效于什么? 有直接的模拟吗?环境变量用于查找可执行文件。 问题答案: 将VAR设置为value。如果需要空格,请用单引号将其引起来。如果要对变量进行插值,请使用双引号,例如。

  • 问题内容: 我在下面的代码中只想设置一个环境变量: 运行此文件: 该调用可以正确打印,但是随后我希望在会话中也设置此env变量,但是: 什么都没有,它是空的。这是预期的行为吗?如果是这样,我如何使这个env变量在我的会话中保持不变,并使用类似这样的程序对其进行设置? 问题答案: 创建新流程时,将复制父流程的环境。在新流程中对环境所做的更改不会影响父流程。修改环境后,您必须让程序启动Shell。

  • 问题内容: 有没有一种方法可以在Linux中使用C设置环境变量? 我尝试了和,但是它们似乎并没有为我工作。 问题答案: 我将在这里做出一个疯狂的猜测,但是这些功能似乎不起作用的正常原因不是因为它们不起作用,而是因为用户并不真正了解环境变量的工作原理。例如,如果我有此程序: 然后我从外壳程序运行它,它不会修改外壳程序的环境- 子进程无法做到这一点。这就是为什么内置可修改环境的shell命令的原因,以

  • 我尝试为将在Windows子系统Linux中运行的Visual Studio Code任务设置环境变量。然而,它似乎不起作用。这是我的tasks.json: 输出为: 请注意,默认情况下,shell已被手动修改为WSL的,正如这里和这里推荐的那样。

  • 问题内容: 我在运行show时有一个file.sh:未设置TERM环境变量。 问题答案: 您可以看到它是否真的没有 设置 。运行命令。 如果没有,则可以这样设置:

  • 测验sh包含: 我设置测试。sh至chmod 777 我用两个参数开始脚本: 然后我通过键入以下内容进行测试: 结果: 我做错了什么?