【问题标题】:Assign full text file path to a variable and use variable as file path in sh file将全文文件路径分配给变量,并将变量用作 sh 文件中的文件路径
【发布时间】:2017-08-23 07:19:25
【问题描述】:

我正在尝试为日志创建一个 shell 脚本并尝试将数据附加到文本文件中。我已经编写了这个示例“test.sh”代码进行测试:

#!/bin/sh -e
touch /home/sample.txt

SPTH = '/home/sample'.txt

echo "MY LOG FILE" >> "$SPTH"
echo "DUMP started at $(date +'%d-%m-%Y %H:%M:%S')" >> /home/sample.txt
echo "DUMP finished at $(date +'%d-%m-%Y %H:%M:%S')" >> /home/sample.txt

但在上面的代码中,除了一行代码之外,所有行都正常工作,即

echo "MY LOG FILE" >> "$SPTH"

报错:

test.sh: line 6: : No such file or directory

我想将文件“/home/sample.txt”的完整路径替换为变量“$SPATH”。

我正在使用

执行我的 shell 脚本
sh test.sh

我做错了什么。

【问题讨论】:

  • 第 4 行呢?它肯定也会引发错误!
  • 作业周围没有空格,应该是SPTH='/home/sample'.txt
  • 如果你输入一行,echo $SPTH,你会看到它真正包含的内容。这应该很有启发性:-)
  • 为什么单引号外有“.txt”?

标签: linux bash shell ubuntu


【解决方案1】:

bash shell 中的变量分配不允许您在其中包含 空格。它实际上会被解释为以= 和随后的关键字作为第一个单词的参数的命令,这是错误的。

将您的代码更改为

SPTH="/home/sample.txt"

这就是为什么SPTH 没有分配到您希望它拥有的实际路径的原因。而且您没有理由在此处使用单引号并排除扩展部分。在双引号内完全使用它绝对没问题。

【讨论】:

  • 谢谢,它的工作。我从 = 中删除了空格并写入为 SPTH='/home/sample'.txt
【解决方案2】:

命令行的语法是第一个token是一个命令,token之间用空格隔开。所以:

SPTH = '/home/sample'.txt

命令为SPTH,第二个令牌为=,以此类推。您可能会认为这很愚蠢,但由于历史原因,大多数 shell 的行为都是如此。

所以你需要删除空格:

SPTH='/home/sample'.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2017-12-07
    • 1970-01-01
    • 2018-09-29
    • 2021-02-28
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多