唉,发个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左右。

posted @ 2025-10-12 19:44  华容道专家  阅读(5)  评论(0)    收藏  举报