2

我试图开发一个使用一个位置参数的简单 bash 脚本。但是无缘无故的参数是空的。下面给出了 bash 脚本。

#!/bin/bash
ulimit -s hard
if [ "$1" != "" ]; then
    echo "Positional parameter 1 contains something"
else
    echo "Positional parameter 1 is empty"
fi
root="$(dirname "$(readlink -f "$1")")"
dir="$(basename "$(readlink -f "$1")")"
path=$root/$dir
echo $path

当我以下列方式运行脚本文件时,它显示空字符串。输出截图

我正在使用 bash -c 命令,因为我需要使用 ProcessBuilder 类从 java 代码运行 bash 脚本。

我对 bash 脚本知之甚少,我尝试了更简单的方式,例如:

root=`dirname $1`
dir=`basename $1`
path=$root/$dir

但结果都是一样的。

4

1 回答 1

4

bash 文档

如果-c存在该选项,则从string读取命令。如果字符串后面有参数,则将它们分配给位置参数,以 . 开头$0

这里的重点是原文,这很好,因为它有点令人惊讶,但我们可以看到它:

bash -c 'echo zero: $0 one: $1 two: $2' a b c

产生:

zero: a one: b two: c

作为输出。

简而言之,你应该插入一个额外的参数来占据这个$0位置,或者调整你所有的参数编号(我会选择前一种解决方案)。

于 2018-01-19T23:48:07.347 回答