在 shell 脚本中使用粘贴命令

Chu*_*dar 1 unix shell paste

我有 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"
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 5

paste期望其参数是文件的名称,而不是文件的内容。使用 bash、ksh 或 zsh,有一种方法可以解决这个问题。代替:

paste $value_1 $value_2
Run Code Online (Sandbox Code Playgroud)

和:

paste <(echo "$value_1") <(echo "$value_2")
Run Code Online (Sandbox Code Playgroud)

<(...)称为过程替代。它使括号内的命令的输出看起来像一个文件。

改进

如果我们不知道输出中的第一个字符,则printf比以下更可靠echo

paste <(printf "%s" "$value_1") <(printf "%s" "$value_2")
Run Code Online (Sandbox Code Playgroud)

例子

让我们使用这两个测试文件:

$ cat file1
1
2
$ cat file2
a
b
Run Code Online (Sandbox Code Playgroud)

现在,让我们将这些文件读入变量并将粘贴应用于这些变量:

$ value_1=$(cat file1); value_2=$(cat file2)
$ paste <(printf "%s" "$value_1") <(printf "%s" "$value_2")
1       a
2       b
Run Code Online (Sandbox Code Playgroud)

或者,将输出保存在变量中:

$ value_3=$(paste <(printf "%s" "$value_1") <(printf "%s" "$value_2"))
$ echo "$value_3"
1       a
2       b
Run Code Online (Sandbox Code Playgroud)