Shell

帶有來自命令替換的內容的回顯變數

  • October 4, 2017

我寫了一個非常基本的命令替換腳本,如下所示:

#!/bin/bash
files=$(ls *.fastq);
echo $files

該目錄包含一堆 .fastq 文件,我只想使用 echo 命令輸出它們

上面的 sript 輸出 fastq 文件,每個 fastq 文件名之間有一個空格。

當我以這種方式使用它時

#!/bin/bash
files=$(ls *.fastq);
echo "$files"

它在新行上列印結果。

為什麼會這樣?它與命令替換有關嗎?

謝謝

引用變數時,通常建議用雙引號將其名稱括起來。這可以防止重新解釋引用字元串中的所有特殊字元——除了$、```(反引號)和\(轉義)。在雙引號中保留$為特殊字元允許引用帶引號的變數(“$variable”),即用變數的值替換變數。

使用雙引號來防止分詞。用雙引號括起來的參數將自身顯示為一個單詞,即使它包含空格分隔符。

例如

variable1="a variable containing five words"
COMMAND This is $variable1    # Executes COMMAND with 7 arguments:
# "This" "is" "a" "variable" "containing" "five" "words"

COMMAND "This is $variable1"  # Executes COMMAND with 1 argument:
# "This is a variable containing five words"

僅當分詞或保留空格是一個問題時,才需要用雙引號將 echo 語句的參數括起來。

有關更多資訊和範例,請訪問此處

您有換行符,因為ls將它們放在不同的行上。換行符在沒有引號的情況下消失,因為 shell (bash) 將每個未加引號的空格分隔文本作為單獨的參數傳遞給命令。

注意:命令替換是由 shell 完成的,**而不是由ls**完成的,所以你不需要ls.

因此你可以做

#!/bin/bash
echo *.fastq

或者

#!/bin/bash
files="*.fastq"
echo "$files"

引用自:https://unix.stackexchange.com/questions/225963