与 Bash 的 source可以在不设置执行位的情况下执行脚本。这是记录在案的预期行为,但这不是反对使用执行位吗?
我知道,这source不会创建子shell。
使用时
df -h | grep /dev/root | awk '{print $5}'
Run Code Online (Sandbox Code Playgroud)
我在我的 Pi 中使用了我的 SD 卡: 78%
但是当我使用
/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print $5}'"
Run Code Online (Sandbox Code Playgroud)
从另一台计算机,我得到:
/dev/root 7.2G 5.3G 1.6G 78% /
Run Code Online (Sandbox Code Playgroud)
完整df -h:
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 5.3G 1.6G 78% /
devtmpfs 364M 0 364M 0% /dev
tmpfs 368M 68K 368M 1% /dev/shm
tmpfs 368M 5.2M 363M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 368M …Run Code Online (Sandbox Code Playgroud) $ echo $PS1
$
$ echo $PS2
>
$ echo $PS3
$ echo $PS4
+
$ select i in 1 2 3
> do
> case $i in
> 1)
> echo 1
> ;;
> *)
> ;;
> esac
> done
1) 1
2) 2
3) 3
#? 1
1
$ PS3="##? "
$ select i in 1 2 3; do case $i in 1) echo 1; ;; *) ;; esac; done
1) 1
2) 2
3) 3 …Run Code Online (Sandbox Code Playgroud) $ unset foo
$ unset bar
$ echo $foo
$ echo $bar
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ foo=a
$ bar=b
$ export bar
$ echo $foo
a
$ echo $bar
b
$ PATH=
$ echo $PATH
$ /bin/bash
bash: lesspipe: No such file or directory
bash: dircolors: No such file or directory
bash: ls: No such file or directory
$ echo $foo
$ echo $bar
b
$ echo $PATH
$
Run Code Online (Sandbox Code Playgroud)
正如我们所看到的,更改$PATH会影响子shell,而另一个变量需要被export编辑。为什么?
我一直认为 bash 在不带或带双引号的情况下对反斜杠的处理方式相同,但我错了:
[user@linux ~]$ echo "foo \ "
foo \
[user@linux ~]$ echo foo \ # Space after \
foo
Run Code Online (Sandbox Code Playgroud)
所以我认为在使用双引号时总是会打印反斜杠,但是:
[user@linux ~]$ echo "foo \" "
foo "
[user@linux ~]$ echo "foo \\ "
foo \
Run Code Online (Sandbox Code Playgroud)
为什么显示第一行代码中的反斜杠?
bash ×3
awk ×1
conventions ×1
echo ×1
executable ×1
path ×1
permissions ×1
prompt ×1
shell ×1
source ×1
ssh ×1
variable ×1