将变量附加到 Bash 中的文件不起作用

Duc*_*uck 4 bash

我有这样的代码

#! /bin/bash

$version = "1.0";
$preffix = "ApplicationName.";

for f in pack*;
do
    echo "bla bla bla" > myFile.txt
    echo $preffix >> myFile.txt
    echo "more stuff" >> myFile.txt
    echo $version >> myFile.txt
done;
Run Code Online (Sandbox Code Playgroud)

输出是

bla bla bla

more stuff
Run Code Online (Sandbox Code Playgroud)

$version 和 $prefix 没有添加到 myFile.txt ......为什么?

dom*_*som 6

$变量前面的符号用于读取它们。

如果要分配它们,则必须省略$符号,即:

version="1.0"
preffix="ApplicationName."
Run Code Online (Sandbox Code Playgroud)

此外,;分配行的末尾不需要 。


Omn*_*ous 6

该程序将在您的程序不适用的地方运行:

#!/bin/bash

version="1.0";
preffix="ApplicationName.";

for f in pack*;
do
    echo "bla bla bla" > myFile.txt
    echo $preffix >> myFile.txt
    echo "more stuff" >> myFile.txt
    echo $version >> myFile.txt
done;
Run Code Online (Sandbox Code Playgroud)

您对空格的喜爱使您的程序更具可读性,但也使其无法运行。

此外,虽然这对这个程序来说无关紧要,但这样做确实是个好主意:

#!/bin/bash

version="1.0";
preffix="ApplicationName.";

for f in pack*;
do
    echo "bla bla bla" > myFile.txt
    echo "$preffix" >> myFile.txt
    echo "more stuff" >> myFile.txt
    echo "$version" >> myFile.txt
done;
Run Code Online (Sandbox Code Playgroud)

这是因为如果你做了类似的事情:

version='1  2'
Run Code Online (Sandbox Code Playgroud)

在你原来的程序中,你最终会得到一个有点出乎意料的结果。将引号放在变量周围是防止此类神秘错误的好主意。

  • 在这种情况下引用变量只会防止任何空格被折叠;bash 只解释一次变量,所以 `a='$(ls -l)'; 回声 $a; echo "$a"` 将打印 `$(ls -l)` 两次,它不会返回并再次展开它。 (2认同)