如何获得不同长度的子串?

how to get a substring with varied length?

所以我正在编写一个脚本,它从输入中获取子字符串,该子字符串是文件路径 (/path/to/file.ext),如果目录 (/path/to) 不存在,它将 运行 mkdir -p /path/to 然后触摸 file.ext.

我的问题是,如果 /

长度可能未知,我如何使用 cut 获取 /path/to

我的脚本目前看起来像这样

INPUT=[=10=]
SUBSTRING_PATH=`$INPUT | cut -d'/' -f 2`

if [! -d $SUBSTRING_PATH]; then
    mkdir -p $SUBSTRING_PATH
fi

touch $INPUT

而不是 cut,使用 dirnamebasename:

input=/path/to/foo
dir=$(dirname "$input")
file=$(basename "$input")

现在 $DIR/path/to$FILEfoo

dirname 还会为您提供工作目录相对路径的有效目录(我的意思是 $(dirname file.txt).)。这意味着,例如,您可以编写 "$dir/some/stuff/foo" 而不必担心您最终会进入完全不同的目录树(例如 /some/stuff 而不是 ./some/stuff)。

正如@ruakh 在评论中提到的那样,如果您没有目录,而是想要丢弃最后一个标记的字符串(也许是 csv 文件的一行),一种方法可以做到这一点将是 "${input%,*}",其中逗号可以替换为任何定界符。据我所知,这是一个 bash 扩展。我只是编辑它,因为将来的流浪访问者在这里看到它可能比在评论中看到它更幸运;对于您的特定用例,dirnamebasename 更合适。