我有3个文本文件。我想阅读它们并将它们存储在不同的变量中,然后使用粘贴将它们连接起来并在控制台中打印它们。 我尝试了以下代码,但它引发了一个错误说
找不到文件
这是我的代码
#!/bin/sh
value_1=`cat file_1.txt`
value_2=`cat file_2.txt`
value_3 = paste $value_1 $value_2
echo "$value_3"
答案 0 :(得分:3)
paste
期望其参数是文件的名称,而不是文件的内容。使用bash,ksh或zsh,可以解决这个问题。替换:
paste $value_1 $value_2
使用:
paste <(echo "$value_1") <(echo "$value_2")
<(...)
称为流程替换。它使得parens中命令的输出看起来像一个文件。
如果我们不知道输出中的第一个字符,那么printf
比echo
更可靠:
paste <(printf "%s" "$value_1") <(printf "%s" "$value_2")
让我们使用这两个测试文件:
$ cat file1
1
2
$ cat file2
a
b
现在,让我们将这些文件读入变量并将粘贴应用于这些变量:
$ value_1=$(cat file1); value_2=$(cat file2)
$ paste <(printf "%s" "$value_1") <(printf "%s" "$value_2")
1 a
2 b
或者,将输出保存在变量中:
$ value_3=$(paste <(printf "%s" "$value_1") <(printf "%s" "$value_2"))
$ echo "$value_3"
1 a
2 b
答案 1 :(得分:0)
#!/bin/sh
value_1=$(cat file_1.txt
value_2=$(cat file_2.txt)
value_3=$(echo $value_1 $value_2 | paste) # or value_3="$value1 $value2"
echo "$value_3"
=
周围不允许空格`用于旧式命令
替代,例如
foo=`command`
建议使用foo=$(command)
语法。 $()
内的反斜杠处理不那么令人惊讶,$()
更容易嵌套。
答案 2 :(得分:0)
第三行应为
value_3=`paste file_1.txt file_2.txt`
你需要反引号,value_3
后没有空格,不要使用变量作为参数,请使用文件名。
它说“找不到文件”的原因是因为value_3
后面有空格被解释为要运行的命令。