如何使用Bash将文件内容存储到变量中

3
我正在尝试将文件内容放入一个变量中,这是我的代码:

var=cut -d@ -f1 tmp2

我也尝试使用管道、let变量等方法。如何让它工作?


1
看起来你今天要提前完成作业了! :) - jaypal singh
4个回答

5

试试这个

var=`cut -d@ -f1 tmp2`

或者这个

var=$(cut -d@ -f1 tmp2)

1
第二种方法更好,因为你可以嵌套它们。 - Dan D.
@DanD。并且引用/扩展的行为就像普通命令行一样。 - sehe

3
如果我理解您的意思,您想要将文件加载到变量中,就像这样吗?
v=`cat file.txt`

你理解得没错,但是当我按照你写的做时,它会将字符串“cat file.txt”放入v中... - boaz
你有在 cat file.txt 周围使用 `` 吗? - Jan Vorcak
2
@user1067642 你可能使用了错误的字符。正确的字符是波浪线下面的那个 (~)。 - Staven

2

试试这个

var="$( cut -d@ -f1 tmp2 )"
$(..) 是调用命令替换的语法。除非你在使用旧版本的厂商Unix系统,如Solaris且使用Bourne shell,否则应避免使用 `...` 这种语法,因为它已被弃用。顺便提一下,你说现在 var 的值等于 'cat file.txt',那么你可能使用了错误的字符,很有可能是单引号字符 ' ,而不是反引号字符 "`"。

正如你的标题所说,你正在尝试“将文件内容放入变量中”,我用 "..." 包围了 cut 命令的输出。现在,var 的值是 cut ... 命令的完整输出内容。

希望这可以帮助到你。


谢谢,我不知道“+1”的弃用,顺便问一下@shellter,你能解释一下为什么要使用cut -d@ -f1 tmp2而不是cat tmp2吗?它有什么特殊的目的吗?谢谢。 - Jan Vorcak
尝试这个。echo 'fld1@fld2\nfld3@fld4\n' | cut -d@ -f1。你应该会得到fld1和fld3在不同的行上。如果tmp2包含相同的文本,你将得到两行完整的内容。如果这不清楚,我可以编辑我的答案,使其更容易理解。此外,反引号在1995年被认为是过时的,参见http://www.amazon.com/New-KornShell-Command-Programming-Language/dp/0131827006/ref=sr_1_3?s=books&ie=UTF8&qid=1322430885&sr=1-3 :-) 感谢您的关注,祝大家好运! - shellter
还有一件事。请注意,您通常需要在双引号内引用$var,例如case "$var" in *pat1* ) xxx ;; *pat2* ) yyy;; esacecho "$var" > newFile。祝您好运。 - shellter

0
如果你只想要文件内容,使用bash命令可以这样写:
var=$(< filename)

documentation


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接