gpt4 book ai didi

linux - 运行 bash -c scriptname arg 时 "$1"为空

转载 作者:太空狗 更新时间:2023-10-29 11:41:16 25 4
gpt4 key购买 nike

我试图开发一个简单的 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

当我按以下方式运行脚本文件时,它显示空字符串。 screenshot of output

我使用的是 bash -c 命令,因为我需要使用 ProcessBuilder 类从 Java 代码运行 bash 脚本。

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

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

但是结果都是一样的。

最佳答案

来自 the bash documentation :

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 $0.

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

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

产生:

zero: a one: b two: c

作为输出。

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

关于linux - 运行 bash -c scriptname arg 时 "$1"为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com