Text-Processing
忽略回顯字元串之間的間距
我使用
echo
以下兩個命令之一將兩個字元串列印到文件中:echo -e "\n""x" >> ~/file echo -e "\n" "x" >> ~/file
第一個結果是:
X
第二個結果是:
X
我想你沒有錯過額外的空間。
我最希望第二個命令的行為與第一個命令一樣,因為之間的額外空間
"\n"
使"x"
閱讀命令更加舒適。鑑於在 Bash 4.3.48(1) 中自然不可能,是否有任何語法允許它或至少接近它?
主要目標是有一個間距,或者至少是一些佔位符/分隔符,這將使我在兩個字元串之間有某種分隔,以便更舒適地閱讀,但上面沒有額外的空間。
請展示你知道的任何方式。我願意使用其他東西
echo
(儘管我更願意避免使用這裡的字元串)。請注意,我使用術語“字元串”來表示“
\n
”。我不確定這裡是否正確,但這是我必須描述的最佳術語。
您可以使用以下
printf
命令執行此操作:printf '\n%s\n' 'x' >file
使用
echo
,我能夠使用tr
刪除空格來完成此操作:echo -e '\n x' | tr -d ' ' >file
也可以寫成(但請不要):
echo -e '\n' 'x' | tr -d ' ' >file
結果:
$ cat file x
我想也可以很容易地爭辯說,這些實際上會使您的命令更難閱讀。
如果關鍵點是在視覺上分離腳本源中的兩個字元串(
\n
和x
,這裡),我想你可以把它們放在變數中:str1='\n' str2='x' echo -e "$str1$str2" >> file
參數擴展當然是背靠背的,但字元串本身不是。
或使用
printf
,但添加尾隨換行符必須單獨完成:{ printf %s $'\n' 'x'; echo; } >> file
%s
當然不會從參數字元串中擴展反斜杠轉義,但在 Bash 中我們可以使用$'...'
ANSI-C 引用。echo
得到最後的換行符。或者定義一個函式來做你想做的事情(
"$*"
將參數連接到函式,沒有分隔符,因為IFS
這裡被清除了):output() { local IFS=; echo -e "$*"; } output "\n" "x"