多行 Heredoc
cat > $FILE <<- EOM Line 1. Line 2. EOM cat > $FILE <<EOM This is line 1. This is line 2. Line 3. EOM
长度 string length
字符串长度 | Bash Find String – Javatpoint
1. ${#string}
2. expr length "$string"
3. expr "$string" :'.*'
4. $str | wc -c
5. $str |awk '{print length}'
嵌入换行符 | newline
Trying to embed newline in a variable in bash [duplicate]
该部分将介绍如何在 BASH 的变量中嵌入换行符号。
直接插入 \n 序列
p="var1\nvar2"
echo -e "${p}"
# echo 命令的 -e 选项会将变量中的 \n 序列解释为换行符。
变量定义时插入换行符
p="var1
var2"
echo "${p}"
# 在该情况下,使用 echo 输出的变量必须使用双引号。如果未使用,则输出结果为:var1 var2
使用 $’\n’ 序列
p="var1"$'\n'"var2"
echo "${p}"
# BASH 会将$'\n'解释为一个换行符号。
# 在这种情况下,使用 echo 输出的变量必须使用双引号。如果未使用,则输出结果为:var1 var2
截取字符串 | substring()
with head
How to retrieve the first n characters of a variable in Bash? – Stack Overflow
echo $FOO | head -c 10 => qwertzuiop
字符串替换 | replace()
with sed
unix – Replace a string in shell script using a variable – Stack Overflow
echo $LINE | sed -e “s/12345678/${replace}/g”
字符串重复 | repeat()
How can I repeat a character
How do I find the width & height of a terminal window?
要在终端里打印一条分隔线,这条分隔线由”#“组成,宽度与终端的宽度相同;
# 问题一、如何重复字符串?
printf '#%.0s' {1..100}
# 问题二、如何获取终端的宽度?
tput cols
# 合并后的代码
# 可能你需要在结尾加上一个换行符,默认 printf 是不带换行符的
printf '#%.0s' $(seq $(tput cols))
字符串 => 字符数组
Bash: Split string into character array
echo "abcdefg" | fold -w1 echo "abcdefg" | grep -E -o .
大小写转换 | Uppercase, Lowercase, …
How to convert a string to lower case in Bash?
tr '[:lower:]' '[:upper:]' <<< 'asdfasd asdfasdfas' # Uppercase
tr '[:upper:]' '[:lower:]' <<< 'asdfasd asdfasdfas' # Lowercase
string_uppercase () {
echo -n "$1" | tr '[:lower:]' '[:upper:]'
}
string_lowercase () {
echo -n "$1" | tr '[:upper:]' '[:lower:]'
}
字符串编码 | urldecode
bash – How to decode URL-encoded string in shell? – Stack Overflow
在 Bash 中,进行 urldecode 的方法,以及相关问题处理。
这段代码从 Stack Overflow 复制而来
function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
function urldecode() { local i="${*//+/ }"; echo -e "${i//%/\\x}"; }
第一个写法太奇怪了,里面包含各种 Bash 知识:
1): 是为了防止 “${*//+/ }” 被当作命令来执行
2)$_ 表示前个命令的最后一个参数,也就是 “${*//+/ }” 的解析结果
3)$* 表示传入命令的全部参数
4)${p/+/ } 表示将变量 p 的 + 替换为空格,而 ${p//+/ } 表示将变量 p 的全部 + 替换为空格;
针对 cURL 请求
针对 cURL 命名,其提供相关命令行选项,不需要我们额外处理 urlencode() 文件。