2017-08-01 52 views
0

的bash腳本莫名其妙地失去了所有尾隨換行,但我不知道在哪裏,或者如何讓他們護尾隨功能結果換行符在bash

#!/bin/bash 
function rep { 
    FIRST=${1// /" "} 
    SECOND=${FIRST//&t;/" "} 
    echo "${SECOND//&nl;/" 
"}" 
} 

if [ "$7" == "" ] 
then 
    cd "$(rep $6)" 
    th sample.lua -checkpoint cv/"$(rep $1})"/"$(rep $2)" -length $3 -temperature $4 -sample 1 > samples/"$(rep $1)"/Sample-$5.txt 
else 
    cd "$(rep $7)" 
    th sample.lua -checkpoint cv/"$(rep $1)"/"$(rep $2)" -length $3 -temperature $4 -sample 1 -start_text "$(rep $5)" > samples/"$(rep $1)"/Sample-$6.txt 
fi 

在這個腳本的功能rep代替我做了標記在替換爲空格,製表符和換行符的輸入字符串中。我很確定任何空格和換行符都會被刪除。

我已經看過這樣的解決方案,https://stackoverflow.com/a/15184414/5332233,但我還沒有能夠讓它在代碼中工作。

編輯 - 這裏的時候,我打算給虛擬人物添加到變量

function rep { 
    FIRST="${1// /" "}" 
    SECOND="${FIRST//&t;/" "}" 
    THIRD="${SECOND//&nl;/" 
"}" 
    a=$(printf $THIRD; printf x); echo ${a%x} 
} 

這裏的另一種嘗試,這仍然擺脫所有尾隨換行符的

#!/bin/bash 
function rep { 
    IN="$1x" 
    FIRST="${IN// /" "}" 
    SECOND="${FIRST//&t;/" "}" 
    THIRD="${SECOND//&nl;/" 
"}" 
    echo "${THIRD%x}" 
} 

echo "$(rep $5)" 

if [ "$7" == "" ] 
then 
    cd "$(rep $6)" 
    th sample.lua -checkpoint cv/"$(rep $1})"/"$(rep $2)" -length $3 -temperature $4 -sample 1 > samples/"$(rep $1)"/Sample-$5.txt 
else 
    cd "$(rep $7)" 
    th sample.lua -checkpoint cv/"$(rep $1)"/"$(rep $2)" -length $3 -temperature $4 -sample 1 -start_text "$(rep $5)" > samples/"$(rep $1)"/Sample-$6.txt 
fi 
+1

是;命令替換剝離*尾隨*新行。鏈接的答案提供了幾種解決方法,以避免這種情況不可取;你嘗試過什麼? – chepner

+0

我試着追加一個字符,並在命令中使用它時將其刪除,但我無法獲得該工作,而另外兩個字符我找不到正確的方法來實現它 – Dankrushen

+0

它會如果你顯示了你所嘗試的內容,那就幫忙 – chepner

回答

3

有關執行間接分配的各種方法,請參見BashFAQ #6。這使您可以在需要將其輸出存在於變量中的同一個shell中運行函數,因此不需要命令替換(並且避免爲子shell支付性能損失fork() ing)。

rep() { 
    local out=$1 in=$2 data 
    data=${in// / } 
    data=${data//&t;/$'\t'} 
    data=${data//&nl;/$'\n'} 
    printf -v "$out" %s "$data" 
} 

input='hello   world&nl;' 
rep result_var "$input" 
printf '%s\n' "<${result_var}>" 

...正常發射作爲輸出:

<hello world 
> 

注意分配是從字符串分割和水珠擴張隱含豁免,所以右側不需要,除非被引用在展開之前,其內容將被解析爲多個單詞

+0

非常感謝!我感謝您給予的所有幫助,這是一個很好的答案,它比Bash中我所能做的更好的代碼。 – Dankrushen

-1

相反的功能使用一個函數,將每個參數放入一個變量中,然後分別執行這些操作,使其發揮作用。

+0

使用函數沒有任何問題。問題是使用命令替換來捕獲該函數的輸出。 –

+0

無論哪種方式,我得到它的工作,我認爲這是夠好的,這不是任何專業的編碼的東西 – Dankrushen