bash脚本中的替换错误

Sha*_*zad 3 linux bash shell syntax-error

我已经尝试了很多,但无法从中获得解决方案.我有一个简单的脚本:

#! /bin/sh
o="12345"
a=o
b=${!a}
echo ${a}
echo ${b}
Run Code Online (Sandbox Code Playgroud)

执行时如

$ . scp.sh
Run Code Online (Sandbox Code Playgroud)

它生成正确的输出而没有错误,但执行时如:

$ ./scp.sh
Run Code Online (Sandbox Code Playgroud)

它产生

./scp.sh:4:./scp.sh:错误的替换

任何想法为什么会这样.


我被建议使用bash模式,它工作正常.但是当我通过Python执行相同的脚本(将脚本标题更改为bash)时,我得到了同样的错误.

我是用Python调用的:

import os
os.system(". ./scp.sh")
Run Code Online (Sandbox Code Playgroud)

bob*_*bah 9

尝试使用:

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

代替

#! /bin/sh
Run Code Online (Sandbox Code Playgroud)

  • 最有可能"./scp.sh"产生用户的默认shell(在你的情况下我打赌是"sh")并在那个shell中运行"./scp.sh",而".scp.sh"是不这样做,尝试运行你的流程,看看发生了什么 (2认同)

rai*_*7ow 7

出现此错误的原因是在这些情况下使用了两个不同的shell.

$ . scp.sh命令将使用当前的shell(bash)来执行脚本(不需要分支子shell).

$ ./scp.sh命令将使用脚本的hashbang行中指定的shell.在你的情况下,它是sh或者dash.

最简单的方法是用#!/bin/bash(或任何路径bash)替换第一行.