唉,发个bash小白贴吧
str= if [ -n $str ]; then echo str is not empty fi
看到str is not empty.
把它改对有两三种方法:① "$str" ② 把[改成[[ ③ ①+②
which [可发现[是/usr/bin/[,而help [[发现[[是bash内置命令。[[与[相比有防呆设计;help help可看更多帮助信息。
if [ -n ]; then echo 1; fi # 进入if
if [[ -n ]]; then echo 2; fi # 一元条件运算符使用了未预期的参数 "]]"
读到文件尾或者空行为止,应用&&而不是||,AI写错了。
while IFS= read -r url && [[ -n "$url" ]]; do echo $url done << EOF 1 2 EOF
bash没有反人类到&&和||和别人不一样。先读作“read成功 且 不是空行”,再看细节是“成功即(exit code)是0”,或者#define TRUE 0
可用以下代码细扣。
b () { echo In b; return 1; }
while 0=true.sh || b; do
echo In while
exit
done
可看出短路求值效果。1=false.sh里exit 1
诡异归诡异,cmd1 || cmd2和if,是统一的。
IFS设为空,防止read split word. 这种设置变量的方法只影响当前语句,再如:
LANG是zh_CN.utf8和空或C时分别ls: -rwxr-xr-x 1 user user 63 10月12日 19:36 t.sh -rwxr-xr-x 1 user user 63 Oct 12 19:36 t.sh 甭说cut了,awk也数不对field,10月12日中间没空格,Oct 12中间有。 $ LANG=C ls -l t.sh $ echo $LANG -rwxr-xr-x 1 user user 29 Oct 12 19:47 t.sh zh_CN.utf8
read -r防止\被read escape. help read, 我想是raw的意思。-s 不回显来自终端的输入,当你从10K长的string里提取了9K出来,想看下结果时,很有用。
shell变量和command line的长度都堪称无限制。我机器上getconf ARG_MAX是2097,152.
B站的index.html里所有视频的URL加在一起几十KB. index.html 200KB左右。

浙公网安备 33010602011771号