Bash

awk 傳遞變數,帶空格的文件

  • May 17, 2020

我是新手,我有小問題,我自己無法解決。這是我面臨的問題:

  • 我正在嘗試查找名稱中帶有空格的文件。

這部分工作:

 find $(pwd) -type d |grep " "
  • 然後我使用awk列印整個文件名並用所需的組名“手動輸入”更改它
 find $(pwd) |grep " " |awk '{print "changegrp developers \""$0"\""}'
  • 當我嘗試將組名developers作為變數時,它並沒有按預期工作。
 find $(pwd) |grep " " |awk group="developers" '{print "changegrp group \""$0"\""}'

我真的不明白語法。手動鍵入的組是如何工作的,當我將其設為變數時,它正在工作。我知道由於忘記單引號或雙引號等,這種事情會讓人頭疼。

你能指出我在哪裡做錯了嗎?

要將groupawk 作為您需要的變數傳遞給 awk-v group="developers"並讓 awk 將其視為變數(而不是字元串文字),它需要在雙引號之外,例如

awk -v group="developers" '{print "changegrp " group " \""$0"\""}'

但是,您可以通過使用類似的東西來避免很多麻煩

find . -type d -name '* *' -exec changegrp developers {} \;

或(如果changegroup支持多個文件參數 - 我不熟悉特定命令)

find . -type d -name '* *' -exec changegrp developers {} +

也可以看看

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