簡體   English   中英

Bash將雙引號轉換為單引號

[英]Bash converting double quotes to single quotes

我的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似乎不僅忽略了我的雙引號,而且將其變成單引號。 變量正在擴展,但通配符沒有。 如果有人能解釋這里發生的事情,我將非常感謝。

如果要遍歷,則不應引用文件路徑:

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

雙引號允許參數擴展, 但它們仍會阻止全局擴展 將通配符移動到引號之外。

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

至於第二個,創建一個數組。

files=(foo*)
cp "${files[@]}" "$bar"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM