Bash
別名似乎不是從 STDIN 讀取的
我正在尋找一個別名來將十六進制從
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