我曾经相信引用字符串总是一个很好的做法,以避免让 shell 解析它。
然后我遇到了这个:
$ x='('
$ [ "$x" = '1' -a "$y" = '1' ]
bash: [: `)' expected, found 1
Run Code Online (Sandbox Code Playgroud)
试图隔离问题,得到同样的错误:
$ [ '(' = '1' -a '1' = '1' ]
bash: [: `)' expected, found 1
Run Code Online (Sandbox Code Playgroud)
我解决了这样的问题:
[ "$x" = '1' ] && [ "$y" = '1' ]
Run Code Online (Sandbox Code Playgroud)
我仍然需要知道这里发生了什么。
典型案例是IFS= read
。
该主题在此线程中得到了很好的解释:
为什么在 bash 中合法的命令之前设置变量?
为了有一个完整的图片,如果你们能解释为什么下面的脚本不能像(我)预期的那样工作,我将不胜感激。
my_script
:
#!/bin/bash
echo "$var1"
echo -n "$IFS" | xxd -p
echo "$var2"
exit 0
Run Code Online (Sandbox Code Playgroud)
打电话my_script
:
var1=foo IFS= var2=bar my_script
Run Code Online (Sandbox Code Playgroud)
输出:
foo
20090a
bar
Run Code Online (Sandbox Code Playgroud)
如您所见IFS
,没有变化,仍然设置为默认值。调用 as 时
如何read
获得自定义?
先感谢您IFS
IFS= read