Bash 将双引号转换为单引号

标签 bash

我的 bash 脚本有问题,这让我很困惑。我有一段代码应该引入一些文件:

if [[ $FILENODE == null ]]
then
    cp "/home/dash/reference/hg18_bowtie_build/hg18.fa*" "$JOBDIR"
    cp "$IN" "$JOBDIR"
else
    echo "Copying files from node$FILENODE"
    rcp "node$FILENODE-ib:$JOBDIR/hg18.fa*" "node$FILENODE-ib:$JOBDIR/$IN" "$JOBDIR"
fi

通常我们会落入条件语句的第一部分,因此 cp 命令应该扩展第一个参数中的通配符。我知道我需要双引号我的论点以确保它们得到扩展。但是,当我使用 bash -x 执行此脚本时,我看到的是:

+ cp '/home/dash/reference/hg18_bowtie_build/hg18.fa*' /usr/tmp/707361.master.cl.osumc.edu
cp: cannot stat `/home/dash/reference/hg18_bowtie_build/hg18.fa*': No such file or directory
+ cp '*.sort.bam' /usr/tmp/707361.master.cl.osumc.edu
cp: cannot stat `*.sort.bam': No such file or directory

出于某种原因,bash 似乎不仅忽略了我的双引号,而且将它们变成了单引号。变量正在扩展,但不是通配符。如果有人能解释这里发生了什么,我将不胜感激。

最佳答案

如果你想要 globbing,你不应该引用文件路径:

cp /home/dash/reference/hg18_bowtie_build/hg18.fa* "$JOBDIR"

关于Bash 将双引号转换为单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11606714/

相关文章:

bash - Shell脚本逐行读取一个文件

linux - 如何使用 AWK 从 nginx 访问日志中收集 IP 和用户代理信息并确定它们的基本 IP 地址?

linux - 无法读取 bash 脚本中的第二个参数

bash - 如何从一行中进行grep

bash - 将文件夹中的文件重命名为连续编号

linux - ssh -V 保存到变量

bash - 如何使用 worker/master 概念使用 slurm 在不同节点上运行不同的独立并行作业?

bash - 将 cat/grep/arguments 通过管道传输到 bash 脚本中的变量中

linux - 在另一个特定字符串之上搜索特定字符串

linux - 并行运行 bash shell 并等待