Bash

別名似乎不是從 STDIN 讀取的

  • August 22, 2015

我正在尋找一個別名來將十六進制從hexdump輸出轉換為“Python 的”十六進製表示法:

$ echo "5f 74 34 0c c9 7b 9f f8  7a 7c 46 ff ff 5c 31 26" | sed 's/  */\\x/g' | awk '{print "\\x"$0}'
\x5f\x74\x34\x0c\xc9\x7b\x9f\xf8\x7a\x7c\x46\xff\xff\x5c\x31\x26

以上工作,所以我嘗試在我.bashrc的這樣創建一個別名:

alias pythonhex="sed 's/  */\\x/g' | awk '{print \"\\\\x\"$0}'"

但這似乎不起作用:

$ echo "5f 74 34 0c c9 7b 9f f8  7a 7c 46 ff ff 5c 31 26" | pythonhex 
\x

在這種情況下,它似乎sed沒有從 STDIN 獲得任何東西,而且awk只是\x一無所獲。

這是一個引用問題。使用單引號防止$0擴展,並正確轉義每個文字單引號:

alias pythonhex='sed '\''s/  */\\x/g'\'' | awk '\''{print "\\x"$0}'\'

確實,您的別名問題是引用問題,由使用者choroba正確解決。

但是你可以考慮一個更簡單的函式:

pythonhex(){ printf "\134x%s" "$@"; echo; }

用作:

$ pythonhex 5f 74 34 0c c9 7b 9f f8  7a 7c 46 ff ff 5c 31 26
\x5f\x74\x34\x0c\xc9\x7b\x9f\xf8\x7a\x7c\x46\xff\xff\x5c\x31\x26

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