หลายครั้งที่ฉันรันคำสั่งด้วยตัวอักษรทั้งหมดเป็นตัวพิมพ์ใหญ่ (อาจCapsLockเป็นเพราะใช้งานได้) และฉันกดEnterก่อนที่จะรู้ตัว
ฉันจะรันคำสั่งสุดท้ายด้วยตัวอักษรทั้งหมดที่เปลี่ยนเป็นตัวพิมพ์เล็กได้อย่างไร?
หลายครั้งที่ฉันรันคำสั่งด้วยตัวอักษรทั้งหมดเป็นตัวพิมพ์ใหญ่ (อาจCapsLockเป็นเพราะใช้งานได้) และฉันกดEnterก่อนที่จะรู้ตัว
ฉันจะรันคำสั่งสุดท้ายด้วยตัวอักษรทั้งหมดที่เปลี่ยนเป็นตัวพิมพ์เล็กได้อย่างไร?
คำตอบ:
คุณสามารถทำได้โดยเพิ่มฟังก์ชั่นเล็ก ๆ ต่อไปนี้ (ฉันเรียกมันว่า??
ง่ายมาก แต่คุณสามารถเปลี่ยนได้ตามที่คุณต้องการ) ใน.bashrc
ไฟล์ของคุณ:
?? () { "${@,,}"; }
ถัดไปเมื่อคุณจะทำงาน:
?? !!
คำสั่งสุดท้ายจะทำงานด้วยตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก
!!
: นี้เป็นส่วนหนึ่งของเครื่องมือประวัติทุบตีโดยเฉพาะ, มันจะขยายระยะคำสั่งสุดท้าย ตัวอย่างเช่นecho !!
จะพิมพ์คำสั่งสุดท้ายที่รันในเชลล์เซสชั่นนี้โดยเฉพาะ"${@,,}
: โครงสร้าง${foo,,}
จะแปลงเนื้อหาของตัวแปรที่$foo
แปลงเป็นตัวอักษรตัวเล็กทั้งหมด $@
คืออาร์เรย์ของพารามิเตอร์ตำแหน่ง เมื่อใช้ภายในฟังก์ชั่นมันจะถูกขยายไปยังพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชันนั้นดังนั้น"${@,,}"
จะแปลงสิ่งที่ผ่านไปยังฟังก์ชั่นเป็นตัวพิมพ์เล็กแล้วดำเนินการ ดังนั้นการเรียกใช้??
ฟังก์ชันด้วย!!
พารามิเตอร์จะแปลงคำสั่งสุดท้ายเป็นตัวพิมพ์เล็กและรัน
"!!"
คุณจำเป็นต้องพูด
??
แปลงตัวอักษรข้อโต้แย้งในการ lowercaes และ!!
เขียนใหม่โดยอัตโนมัติคำสั่งก่อนหน้านี้ในคำสั่งปัจจุบัน (เพื่อ??
จะเป็น โต้แย้งคำสั่งก่อนหน้า)
`echo !! | tr '[: upper:]' '[: lower:]' '
กุญแจอยู่ใน`
ใบเสนอราคา (backticks) - ซึ่งรันเอาต์พุตเป็นคำสั่ง
tr
จะเป็นตัวเลือกแรกของฉันเช่นกัน ใช้งานได้ (ทางเลือกสำหรับ backticks และไม่มี POSIX bracket-classes):$( echo !! | tr '[A-Z]' '[a-z]')
ที่นี่คำตอบโปรแกรมเมอร์เขียนมา .... ใช้หลาม:
`echo "print '!!'.lower()" | python`
หรือทับทิม:
`echo "print '!!'.downcase" | ruby`
หรือ Perl (อาจเป็นที่ชื่นชอบ):
`perl -e "print lc('!!');"`
หรือ PHP:
`php -r "print strtolower('!!');"`
หรือ Awk:
`echo "!!" | awk '{ print tolower($1) }'`
หรือ Sed:
`echo "!!" | sed 's/./\L&/g'`
หรือทุบตี:
str="!!" ; ${str,,}
หรือ zsh
echo "A='!!' ; \$A:l" | zsh
หรือ NodeJS หากคุณมี:
`echo "console.log('!!'.toLowerCase());" | node`
คุณสามารถใช้dd
(แต่ฉันจะไม่ทำ!):
`echo "!!" | dd conv=lcase 2> /dev/null`
คุณสามารถสร้างสคริปต์ขนาดเล็กเพื่อทำงาน:
sudo bash -c 'cat << EOF > /usr/local/bin/lower
#!/usr/bin/python
import fileinput
print "".join(fileinput.input()).lower(),
EOF' && sudo chmod +x /usr/local/bin/lower
สิ่งที่คุณใช้เช่น:
`echo !! | lower`
และเป็นหนึ่งที่มีsed
,
$(echo !! | sed 's/^\(.*\)$/\L\1/g')
ตัวอย่าง:
$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')
เอาท์พุท:
$(echo SUDO APT-GET UPDATE | sed 's/^\(.*\)$/\L\1/g')
[sudo] password for avinash:
0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Connectin^
!!:l
.