簡體   English   中英

處理bash腳本參數中的空格

[英]Handle whitespaces in arguments to a bash script

我在處理bash腳本中包含空格的參數時遇到問題。

劇本

#!/bin/bash
for i in $*
do
    echo "$i"
done

調用(帶有2個參數)

$ ./script.sh "a b" "c"

實際輸出(好像有3個參數)

a
b
c

預期的輸出(好像有兩個參數)

a b
c

有人可以解釋如何獲得預期的輸出嗎?

在第一行將$*更改$* "$@"

回復2011年有關如何將每個參數分配給變量的評論...

該bash函數將每個參數分配給數組中的項目。 這些可以在其他地方使用。

有問題的函數查找某種類型的文件,然后抓取它們:

search "multi word search terms" txt

相關的行是前5行。我們初始化一個數組,遍歷傳遞的參數,並將它們分配為數組中的項。 然后,函數將根據需要引用它們。

這樣,您可以指定一個可選的第3個參數,以在您選擇的編輯器中打開文件:

search "multi word search terms" txt mate

變量$ searchterm已轉義了空格,以便grep將其接受為一個字符串。

function search() {
        terms=();
        for i in "$@"
        do
                terms+=("$i")
        done

        file='*.'${terms[1]};
        searchterm=${terms[0]// /\\ };

        if [ -n "$3" ]; then
                find . -type f -name $file -exec grep -irl "$searchterm" {} \; | xargs ${terms[2]};
        else
                find . -type f -name $file -exec grep -irl "$searchterm" {} \;;
        fi
}

希望這對某人有幫助!

您想要的是$ @作為參數(並且必須將其括在“”中)而不是$ *。

暫無
暫無

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

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