【问题标题】:Can I store file contents to a variable in a shell script?我可以将文件内容存储到 shell 脚本中的变量吗?
【发布时间】:2013-04-13 04:58:13
【问题描述】:

假设我有一个文件 file.txt,其中包含数据(比如“100”)。我想将此文件的内容读入一个变量以供将来处理。我希望它可以在 Linux 和 Solaris 上运行。我该怎么做?

【问题讨论】:

    标签: shell solaris sh


    【解决方案1】:

    试试这条线:

    VAR=$(cat file.txt)
    

    VAR=$(head -1 file.txt)
    

    编辑 1:

    使用 Unix 命令的输出设置变量

    关于 shell 脚本最好的事情之一是它很容易使用任何 Unix 命令来生成输出并使用它来设置变量。

    在本例中,我正在运行一个日期命令并将其输出保存为我的变量的值:

    #!/bin/sh
    #
    STARTED=`date`
    sleep 5
    FINISHED=`date`
    #
    echo "Script start time: $STARTED"
    echo "Script finish time: $FINISHED"
    

    如果我运行这个简单的脚本,我会看到以下内容:

    ubuntu$ /tmp/1.sh
    Script start time: Wed May 7 04:56:51 CDT 2008
    Script finish time: Wed May 7 04:56:56 CDT 2008
    

    几乎所有场景都可以使用相同的方法。

    所以 mvp 的答案适用于任何 unix shell:

    F=`cat file.txt`
    

    尝试使用反引号 ` 而不是 ' 单引号

    【讨论】:

    • 我已经尝试了上述 2 。它不适用于solaris。它给出了语法错误
    • 你的 shell 解释器是什么:sh、bash、csh 或 ksh?
    • Solaris 上的普通 sh 是一个相当老的 shell;它不支持$(...)AFAICR,因此您必须改用var=`...` (注意它们是反引号)。在bash 中,您可以使用var=$(<file.txt),它实际上不会启动子shell。
    【解决方案2】:

    这应该可行:

     VAR=`cat file.txt`
    

    如果您只想获取文件的第一行,请使用:

     VAR=`head -1 file.txt`
    

    【讨论】:

    • VAR = 'cat file.txt echo $var 以上输出 cat file.txt
    • 确保使用反引号,而不是 '。如果不确定,请复制并粘贴它——它确实有效
    【解决方案3】:

    您是否尝试过以下方法

    VAR=$(<file)
    

    当我需要将两行文件中的第二行作为变量存储在 bash 中时,它起作用了。

    【讨论】:

      最近更新 更多