Text-Processing

忽略回顯字元串之間的間距

  • February 7, 2018

我使用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

我想也可以很容易地爭辯說,這些實際上會使您的命令更難閱讀。

如果關鍵點是在視覺上分離腳本源中的兩個字元串(\nx,這裡),我想你可以把它們放在變數中:

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"

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