[英]Bash Script - Nested $(..) Commands - Not working correctly
我試圖在一行上執行這幾個操作/命令,並將其分配給變量。 除一部分外,我的工作方式大約占90%。
我不知道您可以這樣做,但我讀到您可以將$(..)嵌套在其他$(..)....中,所以我試圖這樣做以使此工作正常進行,但似乎無法獲得剩下的一切。
所以基本上,我想做的是:
1.獲取文件的輸出並將其分配給變量
2.然后在輸出的開頭添加一些文本
3.然后在輸出末尾附加一些文本
4.最后刪除換行符,並用“ \\ n”字符替換它們。
我可以通過多個步驟很好地完成此操作,但我想嘗試以這種方式進行操作。
到目前為止,我已經嘗試了以下方法:
我的第一次嘗試,是在閱讀有關嵌套$(..)之前:
MY_VAR=$(echo -n "<pre style=\"display:inline;\">"; cat input.txt | sed ':a;N;$!ba;s/\n/\\n/g'; echo -n "</pre>")
除了在cat命令的輸出和最后一個echo命令之間添加了換行符之外,這條命令的工作方式達到了99%。 我猜這是從cat命令來的,因為sed刪除了除那一行以外的所有換行符,也許...?
其他嘗試:
MY_VAR=$( $(echo -n "<pre style=\"display:inline;\">"; cat input.txt; echo -n "</pre>") | sed ':a;N;$!ba;s/\n/\\n/g')
MY_VAR="$( echo $(echo -n "<pre style=\"display:inline;\">"; cat input.txt; echo "</pre>") | sed ':a;N;$!ba;s/\n/\\n/g' )"
MY_VAR="$( echo "$(echo -n "<pre style=\"display:inline;\">"; cat input.txt; echo "</pre>")" | sed ':a;N;$!ba;s/\n/\\n/g' )"
*多數其他示例都嘗試過在不同的$(..)部分之間使用多余的雙引號...
我進行了幾次其他嘗試,但是它們也都沒有運氣...在上面的其他幾次嘗試中,它似乎奏效,只是sed沒有插入它的替換部分。 輸出在大多數情況下是正確的,除了沒有看到兩行之間的“ \\ n”,它只是顯示了每一行都粉碎成一條線,沒有任何分隔它們的地方。
我在想,如果有人有任何想法,我在這里會缺少一些小東西。
* PS Bash是否為$(..)結構命名? 很難嘗試使用Google,因為它實際上並不搜索符號...
您無需在此處嵌套命令替換。
your_var='<pre style="display:inline;">'"$(<input.txt)"'</pre>'
your_var=${your_var//$'\n'/'\n'}
"$(<input.txt)"
擴展為input.txt
的內容,但沒有任何結尾的換行符。 (命令替換總是刪除結尾的換行符; printf '%s' "$(cat ...)"
具有相同的效果,盡管效率較低,因為它需要一個子shell,而cat ...
則沒有。) ${foo//bar/baz}
擴展為名為foo
的shell變量的內容,其中bar
所有實例都替換為baz
。 $'\\n'
是文字換行符的bash語法。 '\\n'
是bash語法,用於兩個字符的字符串,以反斜杠開頭。 誠然,這是如上所述的多行代碼,但是它比任何涉及命令替換的東西都快得多,而且效率也更高。
但是,如果您確實想要單個嵌套的命令替換,則可以執行以下操作:
your_var=$(printf '%s' '<pre style="display:inline;">' \
"$(sed '$ ! s/$/\\n/g' <input.txt | tr -d '\n')" \
'</pre>')
printf %s
組合了其參數,且參數之間沒有任何定界符 sed
操作在每行的末尾添加一個文字\\n
,除了最后一行 tr -d '\\n'
操作從文件中刪除文字換行符 但是,即使沒有嵌套也可以更有效地完成此方法:
printf -v your_var '%s' '<pre style="display:inline;">' \
"$(sed '$ ! s/$/\\n/g' <input.txt | tr -d '\n')" \
'</pre>')
...具有printf
的結果直接將其結果分配給your_var
,而無需任何外部命令替換(從而節省了外部子shell的開銷)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.