Nhiều lần tôi đã chạy một lệnh với tất cả các chữ cái in hoa (có thể vì CapsLockđã bật) và tôi đã nhấn Entertrước khi nhận ra điều này.
Làm thế nào tôi có thể chạy lệnh cuối cùng với tất cả các chữ cái được chuyển thành chữ thường?
Nhiều lần tôi đã chạy một lệnh với tất cả các chữ cái in hoa (có thể vì CapsLockđã bật) và tôi đã nhấn Entertrước khi nhận ra điều này.
Làm thế nào tôi có thể chạy lệnh cuối cùng với tất cả các chữ cái được chuyển thành chữ thường?
Câu trả lời:
Bạn có thể thực hiện điều đó bằng cách thêm chức năng nhỏ sau đây (tôi gọi nó ??
là rất đơn giản, nhưng bạn có thể thay đổi điều này như bạn muốn) trong của bạn .bashrc
tập tin:
?? () { "${@,,}"; }
Tiếp theo, khi bạn sẽ chạy:
?? !!
lệnh cuối cùng sẽ được chạy với tất cả các chữ cái viết thường.
!!
: đây là một phần của các công cụ lịch sử của bash, cụ thể, nó mở rộng đến lần chạy lệnh cuối cùng . Vì vậy, ví dụ, echo !!
sẽ in ra lệnh chạy cuối cùng trong phiên shell cụ thể này."${@,,}
: Cấu trúc ${foo,,}
sẽ chuyển đổi nội dung của biến được $foo
chuyển đổi thành tất cả các chữ cái viết thường. $@
là mảng các tham số vị trí. Khi được sử dụng bên trong một hàm, nó được mở rộng thành các tham số được truyền cho hàm đó.Vì vậy, "${@,,}"
sẽ chỉ đơn giản chuyển đổi bất cứ thứ gì được chuyển đến hàm thành chữ thường và sau đó thực hiện nó. Do đó, việc chạy ??
hàm với !!
tham số sẽ chuyển đổi lệnh cuối cùng thành chữ thường và chạy nó.
"!!"
.
??
chuyển đổi đối số của nó thư cho lowercaes và !!
tái ghi automaticaly lệnh trước đó trong lệnh hiện tại (do ??
mất như lập luận lệnh trước).
`vang vọng !! | tr '[: trên:]' '[: dưới:]' `
Khóa nằm trong `
trích dẫn (backticks) - chạy đầu ra dưới dạng lệnh.
tr
cũng sẽ là lựa chọn đầu tiên của tôi Cũng hoạt động (thay thế cho backticks và không có lớp khung POSIX):$( echo !! | tr '[A-Z]' '[a-z]')
Ở đây có một lập trình viên trả lời .... sử dụng python:
`echo "print '!!'.lower()" | python`
Hoặc Ruby:
`echo "print '!!'.downcase" | ruby`
Hoặc Perl (có lẽ là sở thích của tôi):
`perl -e "print lc('!!');"`
Hoặc PHP:
`php -r "print strtolower('!!');"`
Hoặc Awk:
`echo "!!" | awk '{ print tolower($1) }'`
Hoặc Sed:
`echo "!!" | sed 's/./\L&/g'`
Hoặc Bash:
str="!!" ; ${str,,}
Hoặc zsh
echo "A='!!' ; \$A:l" | zsh
Hoặc NodeJS nếu bạn có nó:
`echo "console.log('!!'.toLowerCase());" | node`
Bạn cũng có thể sử dụng dd
(nhưng tôi sẽ không!):
`echo "!!" | dd conv=lcase 2> /dev/null`
Bạn cũng có thể tạo một tập lệnh nhỏ để thực hiện công việc:
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
Mà bạn sử dụng như vậy:
`echo !! | lower`
Và một với sed
,
$(echo !! | sed 's/^\(.*\)$/\L\1/g')
Thí dụ:
$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')
Đầu ra:
$(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
.