分配给 bash 脚本中的变量

and*_*ewz 0 shell bash variable assignment

我有以下脚本,我尝试创建一个空文本文件。我试过touch,我试过echo -n >——他们都失败了。

#!/bin/bash

set filename_result="contents"

echo "filename=$filename_result" # Shows: filename=

rm -f "$filename_result".json

touch $filename_result # Error: usage: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
# Note that `% touch myfile` works fine on the command line

touch -- "$filename_result" # Error: touch: : No such file or directory

echo -n > "$filename_result" # Error: No such file or directory

echo "[" >> "$filename_result"

for file in *json
do
    echo "examining file: $file"
    echo "\n" >> "$filename_result"
    cat $file >> "$filename_result"
    echo "\n" >> "$filename_result"
done

echo "\n]" >> "$filename_result"

mv $filename_result "$filename_result".json
Run Code Online (Sandbox Code Playgroud)

编辑:打印到屏幕filename_result变量显示它在设置后为空?

echo "filename=$filename_result" # Shows: filename=
Run Code Online (Sandbox Code Playgroud)

Kam*_*ski 15

set filename_result="contents"不为 赋值filename_result。它分配给第一个位置参数,值本身是filename_result=contents。例子:

$ set filename_result="contents"
$ echo "$1"
filename_result=contents
Run Code Online (Sandbox Code Playgroud)

该变量filename_result不存在,$filename_result扩展为空,"$filename_result"等效于"".

而不是set filename_result="contents"你想要的只是

filename_result="contents"
Run Code Online (Sandbox Code Playgroud)


Ste*_*nny 6

尝试这个:

filename_result=contents
touch -- "$filename_result"
Run Code Online (Sandbox Code Playgroud)

或者:

set contents
touch -- "$1"
Run Code Online (Sandbox Code Playgroud)