当 运行 bash -c scriptname arg 时,“$1”为空
"$1" is empty when running bash -c scriptname arg
我试图开发一个简单的 bash 脚本,其中使用了一个位置参数。但无缘无故参数为空。 bash 脚本如下所示。
#!/bin/bash
ulimit -s hard
if [ "" != "" ]; then
echo "Positional parameter 1 contains something"
else
echo "Positional parameter 1 is empty"
fi
root="$(dirname "$(readlink -f "")")"
dir="$(basename "$(readlink -f "")")"
path=$root/$dir
echo $path
当我按以下方式运行创建脚本文件时,它显示空字符串。
我正在使用 bash -c 命令,因为我需要使用 ProcessBuilder Class 从 java 代码中 运行 bash 脚本。
我对 bash 脚本知之甚少,我尝试了更简单的方法,例如:
root=`dirname `
dir=`basename `
path=$root/$dir
但是结果都是一样的。
If the -c
option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with [=13=]
.
这里强调的是原文,这很好,因为它有点令人惊讶,但我们可以看到:
bash -c 'echo zero: [=10=] one: two: ' a b c
产生:
zero: a one: b two: c
作为输出。
简而言之,您应该插入一个额外的参数来占据 [=13=]
位置,或者调整所有参数编号(我会选择前一种解决方案)。
我试图开发一个简单的 bash 脚本,其中使用了一个位置参数。但无缘无故参数为空。 bash 脚本如下所示。
#!/bin/bash
ulimit -s hard
if [ "" != "" ]; then
echo "Positional parameter 1 contains something"
else
echo "Positional parameter 1 is empty"
fi
root="$(dirname "$(readlink -f "")")"
dir="$(basename "$(readlink -f "")")"
path=$root/$dir
echo $path
当我按以下方式运行创建脚本文件时,它显示空字符串。
我正在使用 bash -c 命令,因为我需要使用 ProcessBuilder Class 从 java 代码中 运行 bash 脚本。
我对 bash 脚本知之甚少,我尝试了更简单的方法,例如:
root=`dirname `
dir=`basename `
path=$root/$dir
但是结果都是一样的。
If the
-c
option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with[=13=]
.
这里强调的是原文,这很好,因为它有点令人惊讶,但我们可以看到:
bash -c 'echo zero: [=10=] one: two: ' a b c
产生:
zero: a one: b two: c
作为输出。
简而言之,您应该插入一个额外的参数来占据 [=13=]
位置,或者调整所有参数编号(我会选择前一种解决方案)。