【问题标题】:Bash Scripting: Initialzing a path with a text file to a variable & iterating the list in the text fileBash 脚本:将带有文本文件的路径初始化为变量并迭代文本文件中的列表
【发布时间】:2021-07-14 16:33:43
【问题描述】:

我目前正在学习 bash 脚本的基础知识(来自 Pythonic 背景),我似乎遇到了一个有趣的情况,我需要对此进行一些解释。

我的目标是创建一个包含文本文件的 Path 变量。我使用 if 语句来检查文件是否存在于目录中。如果存在,它将打印“它存在”。

然后我创建了一个 for 循环来打印文件列表中的元素。当我执行程序时,没有输出,也没有抛出错误。

任何帮助或解释将不胜感激!下面是代码:

#!/bin/bash
veggieFile=/home/lynova/Potato/hewwo.txt 

if [ -e veggieFile ]; then 

    echo "File exists"

    for VEGGIE in $(cat veggieFile  ); do

        echo "Veggies are ${VEGGIE}"

    done

fi

【问题讨论】:

标签: linux bash scripting


【解决方案1】:

您正在检查文件veggieFile 是否存在,而不是名称存储在变量veggieFile 中的文件。您需要扩展名称:

if [ -e "$veggieFile" ]; then
    echo "File exists"
    while IFS= read -r veggie; do
        echo "Veggies are $veggie"
    done < "$veggieFile"
fi

请参阅Bash FAQ 001,了解我为什么使用while 循环而不是for 循环的更多信息。此外,保留全大写名称;为您自己的变量使用小写或混合大小写的名称。


一个可能的混淆来源可能是如何使用引号。在 Python 中,veggieFile 将是一个使用其值的变量,而"veggieFile" 是一个文字字符串。然而,在 shell 中,all 字符串都是文字字符串;引号仅用于转义包含的字符。例如,引用的单词"foo bar" 等价于foo\ bar。您需要使用$ 来获取变量的值。

【讨论】:

  • 啊,非常感谢您富有洞察力的评论,尤其是在引文方面——这种解释是有道理的。我最终能够成功执行该程序!我将查看 BASH 常见问题以进一步学习!
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多