【发布时间】:2015-04-03 19:12:51
【问题描述】:
我有两个 .txt 文件,我想在 .sh 脚本中每行同时读取它们。两个 .txt 文件的行数相同。在循环内部,我想使用 sed 命令更改另一个文件中的 full_sample_name 和 sample_name。 如果您只读取一个文件,我知道这是如何工作的,但我无法让它适用于两个文件。
#! /bin/bash
FULL_SAMPLE="file1.txt"
SAMPLE="file2.txt"
while read ... && ...
do
sed -e "s/\<full_sample_name\>/$FULL_SAMPLE/g" -e "s/\<sample_name\>/$SAMPLE/g" pipeline.sh > $SAMPLE.sh
done < ...?
【问题讨论】:
-
FOO = bar不是 bash 中的变量赋值;必须是FOO=bar;空格很重要。 -
在这里查看我的答案...stackoverflow.com/questions/22730675/…
-
你是对的,我的错。改了。
-
(另外,全大写变量名保留给 shell 内置函数和环境变量;参见 POSIX 规范的相关部分pubs.opengroup.org/onlinepubs/009695399/basedefs/…,第四段以“环境变量名”开头——用户应用程序在shell 脚本 [在环境变量和常规 shell 变量之间共享命名空间] 应使用至少包含一个小写字符的变量名以避免冲突。
-
@CharlesDuffy 更新版本 (pubs.opengroup.org/onlinepubs/9699919799/basedefs/…) 没有这么说。它说:“包含小写字母的环境变量名称的名称空间是为应用程序保留的。应用程序可以使用来自该名称空间的名称定义任何环境变量,而无需修改标准实用程序的行为。”这显然不一样。