簡體   English   中英

BASH:在printf中格式化字符串

[英]BASH : formatting string in printf

我正在執行的腳本:

#!/bin/bash
...
function myprint() {
  cp=$1
  targetpermission=$2
  t1="RESOURCE"
  t2="Current Permission"
  t3="New Permission"
  printf "%s : %s ===> %s\n",$t1,$t2,$t3
}

myprint

預期產量:

RESOURCE : Current Permission ===> New Permission

我得到的輸出:

    [abhyas_app01@localhost safeshell]$ ./test1.sh 
Permission,New : Permission ===> 
,RESOURCE,Current[abhyas_app01@localhost safeshell]$

到底是怎么回事? 如何獲得預期的輸出?

PS- echo不是一種選擇,因為最終我將使用%-Ns來證明字符串的%-Ns ,其中N是根據端子寬度計算的。

在shell中, printf是命令,命令參數用空格而不是逗號分隔。

采用:

printf "%s : %s ===> %s\n" "$t1" "$t2" "$t3"

同樣,雙引號也是必需的。 否則,“ Current Permission和“ New Permission參數將被拆分,並且您將從單個printf命令獲得兩行輸出。

我注意到您的函數(至少)有兩個參數,但是您沒有顯示函數中正在打印或以其他方式使用的參數。 您可能需要重新查看邏輯部分。


根據您當前的邏輯:

t1="RESOURCE"
t2="Current Permission"
t3="New Permission"
printf "%s : %s ===> %s\n",$t1,$t2,$t3

你真的傳遞給printf

printf "%s : %s ===> %s\n,RESOURCE,Current" "Permission,New" "Permission"

注意“格式字符串”參數如何包括所有的$t1和部分$t2 您只為這三種%s格式提供了兩個參數,因此第三個保留為空。 輸出為:

Permission,New : Permission ===> 
,RESOURCE,Current

在第一行的末尾有一個空格,在第二個“行”的末尾沒有換行符(因此您的提示會在Current之后立即顯示)。

暫無
暫無

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

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